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