45 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			45 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Ruby
		
	
	
	
module Gitlab
 | 
						|
  module SlashCommands
 | 
						|
    class Command < BaseCommand
 | 
						|
      COMMANDS = [
 | 
						|
        Gitlab::SlashCommands::IssueShow,
 | 
						|
        Gitlab::SlashCommands::IssueNew,
 | 
						|
        Gitlab::SlashCommands::IssueSearch,
 | 
						|
        Gitlab::SlashCommands::Deploy
 | 
						|
      ].freeze
 | 
						|
 | 
						|
      def execute
 | 
						|
        command, match = match_command
 | 
						|
 | 
						|
        if command
 | 
						|
          if command.allowed?(project, current_user)
 | 
						|
            command.new(project, current_user, params).execute(match)
 | 
						|
          else
 | 
						|
            Gitlab::SlashCommands::Presenters::Access.new.access_denied
 | 
						|
          end
 | 
						|
        else
 | 
						|
          Gitlab::SlashCommands::Help.new(project, current_user, 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
 | 
						|
        COMMANDS.select do |klass|
 | 
						|
          klass.available?(project)
 | 
						|
        end
 | 
						|
      end
 | 
						|
    end
 | 
						|
  end
 | 
						|
end
 |