debian-mirror-gitlab/app/finders/concerns/merged_at_filter.rb
2021-04-29 21:17:54 +05:30

42 lines
1.3 KiB
Ruby

# frozen_string_literal: true
module MergedAtFilter
private
def by_merged_at(items)
return items unless merged_after || merged_before
mr_metrics_scope = MergeRequest::Metrics
mr_metrics_scope = mr_metrics_scope.merged_after(merged_after) if merged_after.present?
mr_metrics_scope = mr_metrics_scope.merged_before(merged_before) if merged_before.present?
join_metrics(items, mr_metrics_scope)
end
def merged_after
params[:merged_after]
end
def merged_before
params[:merged_before]
end
# rubocop: disable CodeReuse/ActiveRecord
#
# This join optimizes merged_at queries when the finder is invoked for a project by moving
# the target_project_id condition from merge_requests table to merge_request_metrics table.
def join_metrics(items, mr_metrics_scope)
scope = if project_id = items.where_values_hash["target_project_id"]
# removing the original merge_requests.target_project_id condition
items = items.unscope(where: :target_project_id)
# adding the target_project_id condition to merge_request_metrics
items.join_metrics(project_id)
else
items.join_metrics
end
scope.merge(mr_metrics_scope)
end
# rubocop: enable CodeReuse/ActiveRecord
end