You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
educoder/lib/gitlab-cli/lib/gitlab/shell.rb

52 lines
1.3 KiB

require 'gitlab'
require 'gitlab/help'
require 'gitlab/cli_helpers'
require 'readline'
class Gitlab::Shell
extend Gitlab::CLI::Helpers
def self.start
actions = Gitlab.actions
comp = proc { |s| actions.map(&:to_s).grep(/^#{Regexp.escape(s)}/) }
Readline.completion_proc = comp
Readline.completion_append_character = ' '
client = Gitlab::Client.new(endpoint: '')
while buf = Readline.readline('gitlab> ', true)
next if buf.nil? || buf.empty?
break if buf == 'exit'
buf = buf.scan(/["][^"]+["]|\S+/).map { |word| word.gsub(/^['"]|['"]$/,'') }
cmd = buf.shift
args = buf.count > 0 ? buf : []
if cmd == 'help'
methods = []
actions.each do |action|
methods << {
name: action.to_s,
owner: client.method(action).owner.to_s
}
end
args[0].nil? ? Gitlab::Help.get_help(methods) : Gitlab::Help.get_help(methods, args[0])
next
end
data = if actions.include?(cmd.to_sym)
confirm_command(cmd)
gitlab_helper(cmd, args)
else
"'#{cmd}' is not a valid command. See the 'help' for a list of valid commands."
end
output_table(cmd, args, data)
end
end
end