module AstroboaCLI::Command

Public Class Methods

commands() click to toggle source
# File lib/astroboa-cli/command.rb, line 62
def self.commands
  @@commands ||= {}
end
current_args() click to toggle source
# File lib/astroboa-cli/command.rb, line 70
def self.current_args
  @current_args
end
current_command() click to toggle source
# File lib/astroboa-cli/command.rb, line 66
def self.current_command
  @current_command
end
current_options() click to toggle source
# File lib/astroboa-cli/command.rb, line 74
def self.current_options
  @current_options
end
global_option(name, *args) click to toggle source
# File lib/astroboa-cli/command.rb, line 82
def self.global_option(name, *args)
  global_options << { :name => name, :args => args }
end
global_options() click to toggle source
# File lib/astroboa-cli/command.rb, line 78
def self.global_options
  @global_options ||= []
end
load() click to toggle source
# File lib/astroboa-cli/command.rb, line 39
def self.load
  Dir[File.join(File.dirname(__FILE__), "command", "*.rb")].each do |file|
    require file
  end
  
  @@log_file = '/tmp/astroboa-cli-log.txt'
  f = File.new(@@log_file, 'w+', 0644)
  @@log = Logger.new(f)
  @@log.level = Logger::INFO
end
log() click to toggle source
# File lib/astroboa-cli/command.rb, line 50
def self.log
  @@log
end
log_file() click to toggle source
# File lib/astroboa-cli/command.rb, line 54
def self.log_file
  @@log_file
end
map_command_to_method(cmd, args=[]) click to toggle source
# File lib/astroboa-cli/command.rb, line 96
def self.map_command_to_method(cmd, args=[])
  command = commands[cmd]

  unless command
    if %w( -v --version ).include?(cmd)
      display AstroboaCLI::VERSION
      exit
    end

    output_with_bang("`#{cmd}` is not an astroboa command.")

    output_with_bang("run `astroboa-cli help` to see available commands.")
    exit 1
  end

  @current_command = cmd

  opts = {}
  invalid_options = []

  parser = OptionParser.new do |parser|
    global_options.each do |global_option|
      parser.on(*global_option[:args]) do |value|
        opts[global_option[:name]] = value
      end
    end
    command[:options].each do |name, option|
      parser.on("-#{option[:short]}", "--#{option[:long]}", option[:desc]) do |value|
        opts[name.gsub("-", "_").to_sym] = value
      end
    end
  end

  begin
    parser.order!(args) do |nonopt|
      invalid_options << nonopt
    end
  rescue OptionParser::InvalidOption => ex
    invalid_options << ex.args.first
    retry
  end

  raise OptionParser::ParseError if opts[:help]

  args.concat(invalid_options)

  @current_args = args
  @current_options = opts

  [ command[:klass].new(args.dup, opts.dup), command[:method] ]
end
namespaces() click to toggle source
# File lib/astroboa-cli/command.rb, line 58
def self.namespaces
  @@namespaces ||= {}
end
register_command(command) click to toggle source
# File lib/astroboa-cli/command.rb, line 88
def self.register_command(command)
  commands[command[:command]] = command
end
register_namespace(namespace) click to toggle source
# File lib/astroboa-cli/command.rb, line 92
def self.register_namespace(namespace)
  namespaces[namespace[:name]] = namespace
end
run(command, arguments=[]) click to toggle source
# File lib/astroboa-cli/command.rb, line 149
def self.run(command, arguments=[])
  object, method = map_command_to_method(command, arguments.dup)
  object.send(method)
rescue => e
  error "An error has occured \n#{e.inspect}\n#{e.backtrace}"
end