diff options
author | Douwe Maan <douwe@gitlab.com> | 2017-04-10 18:56:08 +0300 |
---|---|---|
committer | Douwe Maan <douwe@gitlab.com> | 2017-04-10 18:56:08 +0300 |
commit | 3fda6f52241b634ed9d963197335005651d3e088 (patch) | |
tree | 723ec989bd41fea27d530eb3dff372e3d91e98e0 | |
parent | 76cec3404cd4628a48e56a33fe5ad5a8727e30ab (diff) | |
parent | 3fa898549c52c603e32dcce16942edb505d9eabe (diff) |
Merge branch 'merge-request-parser-merge-requests-for-nodes' into 'master'
Reuse "merge_requests_for_nodes" in "MergeRequestParser"
See merge request !10585
-rw-r--r-- | lib/banzai/reference_parser/merge_request_parser.rb | 41 |
1 files changed, 30 insertions, 11 deletions
diff --git a/lib/banzai/reference_parser/merge_request_parser.rb b/lib/banzai/reference_parser/merge_request_parser.rb index 7d7dcce017e..84a28b33d7c 100644 --- a/lib/banzai/reference_parser/merge_request_parser.rb +++ b/lib/banzai/reference_parser/merge_request_parser.rb @@ -3,23 +3,42 @@ module Banzai class MergeRequestParser < BaseParser self.reference_type = :merge_request + def nodes_visible_to_user(user, nodes) + merge_requests = merge_requests_for_nodes(nodes) + + nodes.select do |node| + merge_request = merge_requests[node] + + merge_request && can?(user, :read_merge_request, merge_request.project) + end + end + + def referenced_by(nodes) + merge_requests = merge_requests_for_nodes(nodes) + + nodes.map { |node| merge_requests[node] }.compact.uniq + end + def merge_requests_for_nodes(nodes) @merge_requests_for_nodes ||= grouped_objects_for_nodes( nodes, - MergeRequest.all, + MergeRequest.includes( + :author, + :assignee, + { + # These associations are primarily used for checking permissions. + # Eager loading these ensures we don't end up running dozens of + # queries in this process. + target_project: [ + { namespace: :owner }, + { group: [:owners, :group_members] }, + :invited_groups, + :project_members + ] + }), self.class.data_attribute ) end - - def references_relation - MergeRequest.includes(:author, :assignee, :target_project) - end - - private - - def can_read_reference?(user, ref_project) - can?(user, :read_merge_request, ref_project) - end end end end |