Commit 3f64dbb7 authored by Lin Jen-Shin's avatar Lin Jen-Shin

Use ActiveSupport::Concern

parent 66a0ec77
module EE module EE
module API module API
module MergeRequests module MergeRequests
module ClassMethods extend ActiveSupport::Concern
class_methods do
def update_params_at_least_one_of def update_params_at_least_one_of
super.push(*%i[ super.push(*%i[
squash squash
...@@ -9,95 +11,89 @@ module EE ...@@ -9,95 +11,89 @@ module EE
end end
end end
# rubocop:disable Metrics/AbcSize prepended do
def self.prepended(api) helpers do
api.singleton_class.prepend(ClassMethods) params :merge_params_ee do
optional :squash, type: Grape::API::Boolean, desc: 'When true, the commits will be squashed into a single commit on merge'
api.module_eval do end
helpers do
params :merge_params_ee do
optional :squash, type: Grape::API::Boolean, desc: 'When true, the commits will be squashed into a single commit on merge'
end
params :optional_params_ee do params :optional_params_ee do
optional :approvals_before_merge, type: Integer, desc: 'Number of approvals required before this can be merged' optional :approvals_before_merge, type: Integer, desc: 'Number of approvals required before this can be merged'
use :merge_params_ee use :merge_params_ee
end end
def update_merge_request_ee(merge_request) def update_merge_request_ee(merge_request)
if params[:squash] && merge_request.project.feature_available?(:merge_request_squash) if params[:squash] && merge_request.project.feature_available?(:merge_request_squash)
merge_request.update(squash: params[:squash]) merge_request.update(squash: params[:squash])
end
end end
end end
end
params do params do
requires :id, type: String, desc: 'The ID of a project' requires :id, type: String, desc: 'The ID of a project'
end
resource :projects, requirements: ::API::API::PROJECT_ENDPOINT_REQUIREMENTS do
# Get the status of the merge request's approvals
#
# Parameters:
# id (required) - The ID of a project
# merge_request_idd (required) - IID of MR
# Examples:
# GET /projects/:id/merge_requests/:merge_request_iid/approvals
#
desc "List a merge request's approvals" do
success EE::API::Entities::MergeRequestApprovals
end end
resource :projects, requirements: ::API::API::PROJECT_ENDPOINT_REQUIREMENTS do get ':id/merge_requests/:merge_request_iid/approvals' do
# Get the status of the merge request's approvals merge_request = find_merge_request_with_access(params[:merge_request_iid])
#
# Parameters:
# id (required) - The ID of a project
# merge_request_idd (required) - IID of MR
# Examples:
# GET /projects/:id/merge_requests/:merge_request_iid/approvals
#
desc "List a merge request's approvals" do
success EE::API::Entities::MergeRequestApprovals
end
get ':id/merge_requests/:merge_request_iid/approvals' do
merge_request = find_merge_request_with_access(params[:merge_request_iid])
present merge_request, with: EE::API::Entities::MergeRequestApprovals, current_user: current_user present merge_request, with: EE::API::Entities::MergeRequestApprovals, current_user: current_user
end end
# Approve a merge request # Approve a merge request
# #
# Parameters: # Parameters:
# id (required) - The ID of a project # id (required) - The ID of a project
# merge_request_iid (required) - IID of MR # merge_request_iid (required) - IID of MR
# Examples: # Examples:
# POST /projects/:id/merge_requests/:merge_request_iid/approve # POST /projects/:id/merge_requests/:merge_request_iid/approve
# #
desc 'Approve a merge request' do desc 'Approve a merge request' do
success EE::API::Entities::MergeRequestApprovals success EE::API::Entities::MergeRequestApprovals
end end
params do params do
optional :sha, type: String, desc: 'When present, must have the HEAD SHA of the source branch' optional :sha, type: String, desc: 'When present, must have the HEAD SHA of the source branch'
end end
post ':id/merge_requests/:merge_request_iid/approve' do post ':id/merge_requests/:merge_request_iid/approve' do
merge_request = find_project_merge_request(params[:merge_request_iid]) merge_request = find_project_merge_request(params[:merge_request_iid])
unauthorized! unless merge_request.can_approve?(current_user) unauthorized! unless merge_request.can_approve?(current_user)
check_sha_param!(params, merge_request) check_sha_param!(params, merge_request)
::MergeRequests::ApprovalService ::MergeRequests::ApprovalService
.new(user_project, current_user) .new(user_project, current_user)
.execute(merge_request) .execute(merge_request)
present merge_request, with: EE::API::Entities::MergeRequestApprovals, current_user: current_user present merge_request, with: EE::API::Entities::MergeRequestApprovals, current_user: current_user
end end
desc 'Remove an approval from a merge request' do desc 'Remove an approval from a merge request' do
success EE::API::Entities::MergeRequestApprovals success EE::API::Entities::MergeRequestApprovals
end end
post ':id/merge_requests/:merge_request_iid/unapprove' do post ':id/merge_requests/:merge_request_iid/unapprove' do
merge_request = find_project_merge_request(params[:merge_request_iid]) merge_request = find_project_merge_request(params[:merge_request_iid])
not_found! unless merge_request.has_approved?(current_user) not_found! unless merge_request.has_approved?(current_user)
::MergeRequests::RemoveApprovalService ::MergeRequests::RemoveApprovalService
.new(user_project, current_user) .new(user_project, current_user)
.execute(merge_request) .execute(merge_request)
present merge_request, with: EE::API::Entities::MergeRequestApprovals, current_user: current_user present merge_request, with: EE::API::Entities::MergeRequestApprovals, current_user: current_user
end
end end
end end
end end
# rubocop:enable Metrics/AbcSize
end end
end end
end end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment