25 lines
1 KiB
Ruby
25 lines
1 KiB
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
module MergeRequests
|
||
|
module AssignsMergeParams
|
||
|
def self.included(klass)
|
||
|
raise "#{self} can not be included in #{klass} without implementing #current_user" unless klass.method_defined?(:current_user)
|
||
|
end
|
||
|
|
||
|
def assign_allowed_merge_params(merge_request, merge_params)
|
||
|
known_merge_params = merge_params.to_h.with_indifferent_access.slice(*MergeRequest::KNOWN_MERGE_PARAMS)
|
||
|
|
||
|
# Not checking `MergeRequest#can_remove_source_branch` as that includes
|
||
|
# other checks that aren't needed here.
|
||
|
known_merge_params.delete(:force_remove_source_branch) unless current_user.can?(:push_code, merge_request.source_project)
|
||
|
|
||
|
merge_request.merge_params.merge!(known_merge_params)
|
||
|
|
||
|
# Delete the known params now that they're assigned, so we don't try to
|
||
|
# assign them through an `#assign_attributes` later.
|
||
|
# They could be coming in as strings or symbols
|
||
|
merge_params.to_h.with_indifferent_access.except!(*MergeRequest::KNOWN_MERGE_PARAMS)
|
||
|
end
|
||
|
end
|
||
|
end
|