class Gitlab::Shell

Attributes

arguments[R]
command[R]

Public Class Methods

completion() click to toggle source

Gets called when user hits TAB key to do completion

# File lib/gitlab/shell.rb, line 62
def completion
  proc { |str| actions.map(&:to_s).grep(/^#{Regexp.escape(str)}/) }
end
execute(cmd = command, args = arguments) click to toggle source

Execute a given command with arguements

# File lib/gitlab/shell.rb, line 67
def execute(cmd = command, args = arguments)
  raise "Unknown command: #{cmd}. See the 'help' for a list of valid commands." unless actions.include?(cmd.to_sym)

  confirm_command(cmd)
  gitlab_helper(cmd, args)
end
history() click to toggle source
# File lib/gitlab/shell.rb, line 79
def history
  @history ||= History.new
end
parse_input(buffer) click to toggle source
# File lib/gitlab/shell.rb, line 47
def parse_input(buffer)
  buf = Shellwords.shellwords(buffer)

  @command = buf.shift
  @arguments = buf.count.positive? ? buf : []
end
quit_shell() click to toggle source
# File lib/gitlab/shell.rb, line 74
def quit_shell
  history.save
  exit
end
setup() click to toggle source
# File lib/gitlab/shell.rb, line 54
def setup
  history.load

  Readline.completion_proc = completion
  Readline.completion_append_character = ' '
end
start() click to toggle source
# File lib/gitlab/shell.rb, line 16
def start
  trap('INT') { quit_shell } # capture ctrl-c
  setup

  while (buffer = Readline.readline('gitlab> '))
    begin
      parse_input buffer

      @arguments.map! { |arg| symbolize_keys(yaml_load(arg)) }

      case buffer
      when nil, ''
        next
      when 'exit'
        quit_shell
      when /^\bhelp\b+/
        puts help(arguments[0]) { |out| out.gsub!(/Gitlab\./, 'gitlab> ') }
      else
        history << buffer

        data = execute command, arguments
        output_table command, arguments, data
      end
    rescue StandardError => e
      puts e.message
    end
  end

  quit_shell # save history if user presses ctrl-d
end