54 lines
1.1 KiB
Ruby
54 lines
1.1 KiB
Ruby
|
module Mercenary
|
||
|
class Program < Command
|
||
|
attr_reader :optparse
|
||
|
attr_reader :config
|
||
|
|
||
|
# Public: Creates a new Program
|
||
|
#
|
||
|
# name - the name of the program
|
||
|
#
|
||
|
# Returns nothing
|
||
|
def initialize(name)
|
||
|
@config = {}
|
||
|
super(name)
|
||
|
end
|
||
|
|
||
|
# Public: Run the program
|
||
|
#
|
||
|
# argv - an array of string args (usually ARGV)
|
||
|
#
|
||
|
# Returns nothing
|
||
|
def go(argv)
|
||
|
logger.debug("Using args passed in: #{argv.inspect}")
|
||
|
|
||
|
cmd = nil
|
||
|
|
||
|
@optparse = OptionParser.new do |opts|
|
||
|
cmd = super(argv, opts, @config)
|
||
|
end
|
||
|
|
||
|
begin
|
||
|
@optparse.parse!(argv)
|
||
|
rescue OptionParser::InvalidOption => e
|
||
|
logger.error "Whoops, we can't understand your command."
|
||
|
logger.error "#{e.message}"
|
||
|
logger.error "Run your command again with the --help switch to see available options."
|
||
|
abort
|
||
|
end
|
||
|
|
||
|
logger.debug("Parsed config: #{@config.inspect}")
|
||
|
|
||
|
begin
|
||
|
cmd.execute(argv, @config)
|
||
|
rescue => e
|
||
|
if cmd.trace
|
||
|
raise e
|
||
|
else
|
||
|
logger.error e.message
|
||
|
abort
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|