Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2020-09-18 09:09:31 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2020-09-18 09:09:31 +0300
commit0115b63f646be489bb9685dad0e4b0747a79de05 (patch)
tree1739ce6f3e7ab90db561e3415bd34427f4839b40 /lib/gitlab/search
parent37ea4b5fbf55e039a2255f0f5d5508e5f479775c (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'lib/gitlab/search')
-rw-r--r--lib/gitlab/search/recent_issues.rb45
-rw-r--r--lib/gitlab/search/recent_items.rb59
-rw-r--r--lib/gitlab/search/recent_merge_requests.rb17
3 files changed, 81 insertions, 40 deletions
diff --git a/lib/gitlab/search/recent_issues.rb b/lib/gitlab/search/recent_issues.rb
index 3eb7101a344..413218da64d 100644
--- a/lib/gitlab/search/recent_issues.rb
+++ b/lib/gitlab/search/recent_issues.rb
@@ -2,51 +2,16 @@
module Gitlab
module Search
- class RecentIssues
- ITEMS_LIMIT = 100
- EXPIRES_AFTER = 7.days
-
- def initialize(user:, items_limit: ITEMS_LIMIT, expires_after: EXPIRES_AFTER)
- @user = user
- @items_limit = items_limit
- @expires_after = expires_after
- end
-
- def log_view(issue)
- with_redis do |redis|
- redis.zadd(key, Time.now.to_f, issue.id)
- redis.expire(key, @expires_after)
-
- # There is a race condition here where we could end up removing an
- # item from 2 places concurrently but this is fine since worst case
- # scenario we remove an extra item from the end of the list.
- if redis.zcard(key) > @items_limit
- redis.zremrangebyrank(key, 0, 0) # Remove least recent
- end
- end
- end
-
- def search(term)
- ids = with_redis do |redis|
- redis.zrevrange(key, 0, @items_limit - 1)
- end.map(&:to_i)
-
- IssuesFinder.new(@user, search: term, in: 'title').execute.reorder(nil).id_in_ordered(ids) # rubocop: disable CodeReuse/ActiveRecord
- end
-
+ class RecentIssues < RecentItems
private
- def with_redis(&blk)
- Gitlab::Redis::SharedState.with(&blk) # rubocop: disable CodeReuse/ActiveRecord
- end
-
- def key
- "recent_items:#{type.name.downcase}:#{@user.id}"
- end
-
def type
Issue
end
+
+ def finder
+ IssuesFinder
+ end
end
end
end
diff --git a/lib/gitlab/search/recent_items.rb b/lib/gitlab/search/recent_items.rb
new file mode 100644
index 00000000000..40d96ded275
--- /dev/null
+++ b/lib/gitlab/search/recent_items.rb
@@ -0,0 +1,59 @@
+# frozen_string_literal: true
+
+module Gitlab
+ module Search
+ # This is an abstract class used for storing/searching recently viewed
+ # items. The #type and #finder methods are the only ones needed to be
+ # implemented by classes inheriting from this.
+ class RecentItems
+ ITEMS_LIMIT = 100
+ EXPIRES_AFTER = 7.days
+
+ def initialize(user:, items_limit: ITEMS_LIMIT, expires_after: EXPIRES_AFTER)
+ @user = user
+ @items_limit = items_limit
+ @expires_after = expires_after
+ end
+
+ def log_view(item)
+ with_redis do |redis|
+ redis.zadd(key, Time.now.to_f, item.id)
+ redis.expire(key, @expires_after)
+
+ # There is a race condition here where we could end up removing an
+ # item from 2 places concurrently but this is fine since worst case
+ # scenario we remove an extra item from the end of the list.
+ if redis.zcard(key) > @items_limit
+ redis.zremrangebyrank(key, 0, 0) # Remove least recent
+ end
+ end
+ end
+
+ def search(term)
+ ids = with_redis do |redis|
+ redis.zrevrange(key, 0, @items_limit - 1)
+ end.map(&:to_i)
+
+ finder.new(@user, search: term, in: 'title').execute.reorder(nil).id_in_ordered(ids) # rubocop: disable CodeReuse/ActiveRecord
+ end
+
+ private
+
+ def with_redis(&blk)
+ Gitlab::Redis::SharedState.with(&blk) # rubocop: disable CodeReuse/ActiveRecord
+ end
+
+ def key
+ "recent_items:#{type.name.downcase}:#{@user.id}"
+ end
+
+ def type
+ raise NotImplementedError
+ end
+
+ def finder
+ raise NotImplementedError
+ end
+ end
+ end
+end
diff --git a/lib/gitlab/search/recent_merge_requests.rb b/lib/gitlab/search/recent_merge_requests.rb
new file mode 100644
index 00000000000..7b14e3b33e5
--- /dev/null
+++ b/lib/gitlab/search/recent_merge_requests.rb
@@ -0,0 +1,17 @@
+# frozen_string_literal: true
+
+module Gitlab
+ module Search
+ class RecentMergeRequests < RecentItems
+ private
+
+ def type
+ MergeRequest
+ end
+
+ def finder
+ MergeRequestsFinder
+ end
+ end
+ end
+end