54 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			54 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Ruby
		
	
	
	
# frozen_string_literal: true
 | 
						|
 | 
						|
module Gitlab
 | 
						|
  module SlashCommands
 | 
						|
    class Command < BaseCommand
 | 
						|
      def self.commands
 | 
						|
        [
 | 
						|
          Gitlab::SlashCommands::IssueShow,
 | 
						|
          Gitlab::SlashCommands::IssueNew,
 | 
						|
          Gitlab::SlashCommands::IssueSearch,
 | 
						|
          Gitlab::SlashCommands::IssueMove,
 | 
						|
          Gitlab::SlashCommands::IssueClose,
 | 
						|
          Gitlab::SlashCommands::IssueComment,
 | 
						|
          Gitlab::SlashCommands::Deploy,
 | 
						|
          Gitlab::SlashCommands::Run
 | 
						|
        ]
 | 
						|
      end
 | 
						|
 | 
						|
      def execute
 | 
						|
        command, match = match_command
 | 
						|
 | 
						|
        if command
 | 
						|
          if command.allowed?(project, current_user)
 | 
						|
            command.new(project, chat_name, params).execute(match)
 | 
						|
          else
 | 
						|
            Gitlab::SlashCommands::Presenters::Access.new.access_denied(project)
 | 
						|
          end
 | 
						|
        else
 | 
						|
          Gitlab::SlashCommands::Help.new(project, chat_name, params)
 | 
						|
            .execute(available_commands, params[:text])
 | 
						|
        end
 | 
						|
      end
 | 
						|
 | 
						|
      def match_command
 | 
						|
        match = nil
 | 
						|
        service =
 | 
						|
          available_commands.find do |klass|
 | 
						|
            match = klass.match(params[:text])
 | 
						|
          end
 | 
						|
 | 
						|
        [service, match]
 | 
						|
      end
 | 
						|
 | 
						|
      private
 | 
						|
 | 
						|
      def available_commands
 | 
						|
        self.class.commands.keep_if do |klass|
 | 
						|
          klass.available?(project)
 | 
						|
        end
 | 
						|
      end
 | 
						|
    end
 | 
						|
  end
 | 
						|
end
 |