merge_requests.rb 1.69 KB
module Gitlab
  # Issues API
  class MergeRequests < Grape::API
    before { authenticate! }

    resource :projects do
      #list
      get ":id/merge_requests" do
        authorize! :read_merge_request, user_project
        
        present user_project.merge_requests, with: Entities::MergeRequest
      end
      
      #show
      get ":id/merge_request/:merge_request_id" do
        merge_request = user_project.merge_requests.find(params[:merge_request_id])
        
        authorize! :read_merge_request, merge_request
        
        present merge_request, with: Entities::MergeRequest
      end

      #create merge_request
      post ":id/merge_requests" do
        attrs = attributes_for_keys [:source_branch, :target_branch, :assignee_id, :title]
        merge_request = user_project.merge_requests.new(attrs)
        merge_request.author = current_user
        
        authorize! :write_merge_request, merge_request
        
        if merge_request.save
          merge_request.reload_code
          present merge_request, with: Entities::MergeRequest
        else
          not_found!
        end
      end

      #update merge_request
      put ":id/merge_request/:merge_request_id" do
        attrs = attributes_for_keys [:source_branch, :target_branch, :assignee_id, :title, :closed]
        merge_request = user_project.merge_requests.find(params[:merge_request_id])
        
        authorize! :modify_merge_request, merge_request
        
        if merge_request.update_attributes attrs
          merge_request.reload_code
          merge_request.mark_as_unchecked
          present merge_request, with: Entities::MergeRequest
        else
          not_found!
        end
      end

    end
  end
end