diff options
Diffstat (limited to 'app/models/users/merge_request_interaction.rb')
-rw-r--r-- | app/models/users/merge_request_interaction.rb | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/app/models/users/merge_request_interaction.rb b/app/models/users/merge_request_interaction.rb new file mode 100644 index 00000000000..35d1d3206b5 --- /dev/null +++ b/app/models/users/merge_request_interaction.rb @@ -0,0 +1,44 @@ +# frozen_string_literal: true + +module Users + class MergeRequestInteraction + def initialize(user:, merge_request:) + @user = user + @merge_request = merge_request + end + + def declarative_policy_subject + merge_request + end + + def can_merge? + merge_request.can_be_merged_by?(user) + end + + def can_update? + user.can?(:update_merge_request, merge_request) + end + + def review_state + reviewer&.state + end + + def reviewed? + reviewer&.reviewed? == true + end + + def approved? + merge_request.approvals.any? { |app| app.user_id == user.id } + end + + private + + def reviewer + @reviewer ||= merge_request.merge_request_reviewers.find { |r| r.user_id == user.id } + end + + attr_reader :user, :merge_request + end +end + +::Users::MergeRequestInteraction.prepend_if_ee('EE::Users::MergeRequestInteraction') |