44 lines
874 B
Ruby
44 lines
874 B
Ruby
# 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_mod_with('Users::MergeRequestInteraction')
|