diff options
author | Z.J. van de Weg <zegerjan@gitlab.com> | 2016-06-17 15:44:38 +0200 |
---|---|---|
committer | Z.J. van de Weg <zegerjan@gitlab.com> | 2016-06-17 21:02:51 +0200 |
commit | 05a4a586b5e80f7d30de51199d5bb5bcf7f61705 (patch) | |
tree | 5ac9c5821e08d25a482a9275297d2bf78cdb7a0a /lib/api/award_emoji.rb | |
parent | 34558315d9deb305b062b825a9a1821ee17352cc (diff) | |
download | gitlab-ce-05a4a586b5e80f7d30de51199d5bb5bcf7f61705.tar.gz |
Add endpoints for award emoji on notes
Docs also added.
Diffstat (limited to 'lib/api/award_emoji.rb')
-rw-r--r-- | lib/api/award_emoji.rb | 151 |
1 files changed, 83 insertions, 68 deletions
diff --git a/lib/api/award_emoji.rb b/lib/api/award_emoji.rb index a7949b9e11d..985590312e3 100644 --- a/lib/api/award_emoji.rb +++ b/lib/api/award_emoji.rb @@ -1,7 +1,6 @@ module API class AwardEmoji < Grape::API before { authenticate! } - AWARDABLES = [Issue, MergeRequest] resource :projects do @@ -9,93 +8,109 @@ module API awardable_string = awardable_type.to_s.underscore.pluralize awardable_id_string = "#{awardable_type.to_s.underscore}_id" - # Get a list of project +awardable+ award emoji - # - # Parameters: - # id (required) - The ID of a project - # awardable_id (required) - The ID of an issue or MR - # Example Request: - # GET /projects/:id/issues/:awardable_id/award_emoji - get ":id/#{awardable_string}/:#{awardable_id_string}/award_emoji" do - awardable = user_project.send(awardable_string.to_sym).find(params[awardable_id_string]) + [ ":id/#{awardable_string}/:#{awardable_id_string}/award_emoji", + ":id/#{awardable_string}/:#{awardable_id_string}/notes/:note_id/award_emoji" + ].each do |endpoint| - if can_read_awardable?(awardable) - awards = paginate(awardable.award_emoji) - present awards, with: Entities::AwardEmoji - else - not_found!("Award Emoji") + # Get a list of project +awardable+ award emoji + # + # Parameters: + # id (required) - The ID of a project + # awardable_id (required) - The ID of an issue or MR + # Example Request: + # GET /projects/:id/issues/:awardable_id/award_emoji + get endpoint do + if can_read_awardable? + awards = paginate(awardable.award_emoji) + present awards, with: Entities::AwardEmoji + else + not_found!("Award Emoji") + end end - end - - # Get a specific award emoji - # - # Parameters: - # id (required) - The ID of a project - # awardable_id (required) - The ID of an issue or MR - # award_id (required) - The ID of the award - # Example Request: - # GET /projects/:id/issues/:awardable_id/award_emoji/:award_id - get ":id/#{awardable_string}/:#{awardable_id_string}/award_emoji/:award_id" do - awardable = user_project.send(awardable_string.to_sym).find(params[awardable_id_string.to_sym]) - if can_read_awardable?(awardable) - present awardable.award_emoji.find(params[:award_id]), with: Entities::AwardEmoji - else - not_found!("Award Emoji") + # Get a specific award emoji + # + # Parameters: + # id (required) - The ID of a project + # awardable_id (required) - The ID of an issue or MR + # award_id (required) - The ID of the award + # Example Request: + # GET /projects/:id/issues/:awardable_id/award_emoji/:award_id + get "#{endpoint}/:award_id" do + if can_read_awardable? + present awardable.award_emoji.find(params[:award_id]), with: Entities::AwardEmoji + else + not_found!("Award Emoji") + end end - end - # Award a new Emoji - # - # Parameters: - # id (required) - The ID of a project - # awardable_id (required) - The ID of an issue or mr - # name (required) - The name of a award_emoji (without colons) - # Example Request: - # POST /projects/:id/issues/:awardable_id/notes - post ":id/#{awardable_string}/:#{awardable_id_string}/award_emoji" do - required_attributes! [:name] + # Award a new Emoji + # + # Parameters: + # id (required) - The ID of a project + # awardable_id (required) - The ID of an issue or mr + # name (required) - The name of a award_emoji (without colons) + # Example Request: + # POST /projects/:id/issues/:awardable_id/award_emoji + post endpoint do + required_attributes! [:name] - awardable = user_project.send(awardable_string.to_sym).find(params[awardable_id_string.to_sym]) - not_found!('Award Emoji') unless can_read_awardable?(awardable) + not_found!('Award Emoji') unless can_read_awardable? - award = awardable.award_emoji.new(name: params[:name], user: current_user) + award = awardable.award_emoji.new(name: params[:name], user: current_user) - if award.save - present award, with: Entities::AwardEmoji - else - not_found!("Award Emoji #{award.errors.messages}") + if award.save + present award, with: Entities::AwardEmoji + else + not_found!("Award Emoji #{award.errors.messages}") + end end - end - # Delete a +awardables+ award emoji - # - # Parameters: - # id (required) - The ID of a project - # awardable_id (required) - The ID of an issue or MR - # award_emoji_id (required) - The ID of an award emoji - # Example Request: - # DELETE /projects/:id/issues/:noteable_id/notes/:note_id - delete ":id/#{awardable_string}/:#{awardable_id_string}/award_emoji/:award_id" do - awardable = user_project.send(awardable_string.to_sym).find(params[awardable_id_string.to_sym]) - award = awardable.award_emoji.find(params[:award_id]) + # Delete a +awardables+ award emoji + # + # Parameters: + # id (required) - The ID of a project + # awardable_id (required) - The ID of an issue or MR + # award_emoji_id (required) - The ID of an award emoji + # Example Request: + # DELETE /projects/:id/issues/:issue_id/notes/:note_id/award_emoji/:award_id + delete "#{endpoint}/:award_id" do + award = awardable.award_emoji.find(params[:award_id]) - unauthorized! unless award.user == current_user || current_user.admin? + unauthorized! unless award.user == current_user || current_user.admin? - award.destroy - present award, with: Entities::AwardEmoji + award.destroy + present award, with: Entities::AwardEmoji + end end end end - helpers do - def awardable_read_ability_name(awardable) - end - def can_read_awardable?(awardable) + helpers do + def can_read_awardable? ability = "read_#{awardable.class.to_s.underscore}".to_sym can?(current_user, ability, awardable) end + + def awardable + @awardable ||= + begin + if params.include?(:note_id) + noteable.notes.find(params[:note_id]) + else + noteable + end + end + end + + def noteable + if params.include?(:issue_id) + user_project.issues.find(params[:issue_id]) + else + user_project.merge_requests.find(params[:merge_request_id]) + end + end end end end |