summaryrefslogtreecommitdiff
path: root/app/finders/merge_requests_finder.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/finders/merge_requests_finder.rb')
-rw-r--r--app/finders/merge_requests_finder.rb27
1 files changed, 26 insertions, 1 deletions
diff --git a/app/finders/merge_requests_finder.rb b/app/finders/merge_requests_finder.rb
index 40089c082c1..e190d5d90c9 100644
--- a/app/finders/merge_requests_finder.rb
+++ b/app/finders/merge_requests_finder.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
# Finders::MergeRequest class
#
# Used to filter MergeRequests collections by set of params
@@ -25,13 +27,17 @@
# updated_before: datetime
#
class MergeRequestsFinder < IssuableFinder
+ def self.scalar_params
+ @scalar_params ||= super + [:wip]
+ end
+
def klass
MergeRequest
end
def filter_items(_items)
items = by_source_branch(super)
-
+ items = by_wip(items)
by_target_branch(items)
end
@@ -41,19 +47,38 @@ class MergeRequestsFinder < IssuableFinder
@source_branch ||= params[:source_branch].presence
end
+ # rubocop: disable CodeReuse/ActiveRecord
def by_source_branch(items)
return items unless source_branch
items.where(source_branch: source_branch)
end
+ # rubocop: enable CodeReuse/ActiveRecord
def target_branch
@target_branch ||= params[:target_branch].presence
end
+ # rubocop: disable CodeReuse/ActiveRecord
def by_target_branch(items)
return items unless target_branch
items.where(target_branch: target_branch)
end
+
+ def by_wip(items)
+ if params[:wip] == 'yes'
+ items.where(wip_match(items.arel_table))
+ elsif params[:wip] == 'no'
+ items.where.not(wip_match(items.arel_table))
+ else
+ items
+ end
+ end
+
+ def wip_match(table)
+ table[:title].matches('WIP:%')
+ .or(table[:title].matches('WIP %'))
+ .or(table[:title].matches('[WIP]%'))
+ end
end