From 5a07b760dff04660d9c7da84852c710b1fc2f786 Mon Sep 17 00:00:00 2001 From: Douwe Maan Date: Fri, 12 Aug 2016 20:17:18 -0500 Subject: Refactor slash command definition --- app/services/projects/autocomplete_service.rb | 46 +++++++++++---------------- app/services/projects/participants_service.rb | 41 +++++++----------------- 2 files changed, 31 insertions(+), 56 deletions(-) (limited to 'app/services/projects') diff --git a/app/services/projects/autocomplete_service.rb b/app/services/projects/autocomplete_service.rb index 477c999eff4..cb85ee6694d 100644 --- a/app/services/projects/autocomplete_service.rb +++ b/app/services/projects/autocomplete_service.rb @@ -1,7 +1,7 @@ module Projects class AutocompleteService < BaseService def issues - @project.issues.visible_to_user(current_user).opened.select([:iid, :title]) + IssuesFinder.new(current_user, project_id: project.id, state: 'opened').execute.select([:iid, :title]) end def milestones @@ -9,42 +9,34 @@ module Projects end def merge_requests - @project.merge_requests.opened.select([:iid, :title]) + MergeRequestsFinder.new(current_user, project_id: project.id, state: 'opened').execute.select([:iid, :title]) end def labels @project.labels.select([:title, :color]) end - def commands - # We don't return commands when editing an issue or merge request - # This should be improved by not enabling autocomplete at the JS-level - # following this suggestion: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/5021#note_13837384 - return [] if !target || %w[edit update].include?(params[:action_name]) + def commands(noteable, type) + noteable ||= + case type + when 'Issue' + @project.issues.build + when 'MergeRequest' + @project.merge_requests.build + end - SlashCommands::InterpretService.command_definitions( + return [] unless noteable && noteable.is_a?(Issuable) + + opts = { project: project, - noteable: target, + noteable: noteable, current_user: current_user - ) - end + } + SlashCommands::InterpretService.command_definitions.map do |definition| + next unless definition.available?(opts) - private - - def target - @target ||= begin - noteable_id = params[:type_id] - case params[:type] - when 'Issue' - IssuesFinder.new(current_user, project_id: project.id, state: 'all'). - execute.find_or_initialize_by(iid: noteable_id) - when 'MergeRequest' - MergeRequestsFinder.new(current_user, project_id: project.id, state: 'all'). - execute.find_or_initialize_by(iid: noteable_id) - else - nil - end - end + definition.to_h(opts) + end.compact end end end diff --git a/app/services/projects/participants_service.rb b/app/services/projects/participants_service.rb index 1c8f2913e8b..d38328403c1 100644 --- a/app/services/projects/participants_service.rb +++ b/app/services/projects/participants_service.rb @@ -1,45 +1,28 @@ module Projects class ParticipantsService < BaseService - attr_reader :noteable_type, :noteable_id - - def execute - @noteable_type = params[:type] - @noteable_id = params[:type_id] + attr_reader :noteable + + def execute(noteable) + @noteable = noteable project_members = sorted(project.team.members) - participants = target_owner + participants_in_target + all_members + groups + project_members + participants = noteable_owner + participants_in_noteable + all_members + groups + project_members participants.uniq end - def target - @target ||= - case noteable_type - when 'Issue' - IssuesFinder.new(current_user, project_id: project.id, state: 'all'). - execute.find_by(iid: noteable_id) - when 'MergeRequest' - MergeRequestsFinder.new(current_user, project_id: project.id, state: 'all'). - execute.find_by(iid: noteable_id) - when 'Commit' - project.commit(noteable_id) - else - nil - end - end - - def target_owner - return [] unless target && target.author.present? + def noteable_owner + return [] unless noteable && noteable.author.present? [{ - name: target.author.name, - username: target.author.username + name: noteable.author.name, + username: noteable.author.username }] end - def participants_in_target - return [] unless target + def participants_in_noteable + return [] unless noteable - users = target.participants(current_user) + users = noteable.participants(current_user) sorted(users) end -- cgit v1.2.3