class Routemaster::CLI::Base
Public Class Methods
inherited(by)
click to toggle source
# File routemaster/cli/base.rb, line 8 def self.inherited(by) by.extend(ClassMethods) end
new(stderr:, stdout:)
click to toggle source
# File routemaster/cli/base.rb, line 38 def initialize(stderr:, stdout:) @stderr = stderr @stdout = stdout end
Public Instance Methods
run(argv)
click to toggle source
# File routemaster/cli/base.rb, line 43 def run(argv) @argv = argv _parser.parse!(@argv) instance_eval(&self.class.action) rescue Exit raise rescue StandardError => e log "#{e.class.name}: #{e.message}" if config.verbose e.backtrace.each { |l| log "\t#{l}" } end raise Exit, 2 end
Protected Instance Methods
argv()
click to toggle source
# File routemaster/cli/base.rb, line 59 def argv @argv || [] end
bad_argc!()
click to toggle source
# File routemaster/cli/base.rb, line 85 def bad_argc! log "Wrong number of arguments." usage! end
config()
click to toggle source
# File routemaster/cli/base.rb, line 63 def config @config ||= Hashie::Mash.new(_default_options).merge(self.class.defaults) end
helper()
click to toggle source
# File routemaster/cli/base.rb, line 67 def helper Helper.new(config) end
log(message)
click to toggle source
# File routemaster/cli/base.rb, line 71 def log(message) @stderr.puts(message) end
puts(message)
click to toggle source
# File routemaster/cli/base.rb, line 75 def puts(message) @stdout.puts(message) end
usage!()
click to toggle source
# File routemaster/cli/base.rb, line 79 def usage! log "Usage:" log _parser raise Exit, 1 end
Private Instance Methods
_default_options()
click to toggle source
# File routemaster/cli/base.rb, line 92 def _default_options { verbose: false } end
_description()
click to toggle source
# File routemaster/cli/base.rb, line 129 def _description self.class.descr.split(/\n/).map(&:strip).reject(&:empty?).join("\n") end
_parser()
click to toggle source
# File routemaster/cli/base.rb, line 96 def _parser @parser ||= OptionParser.new do |p| p.banner = self.class.syntax p.separator self.class.descr if self.class.options p.separator 'Options:' instance_exec(p, &self.class.options) end p.separator 'Common options:' p.on('-b', '--bus DOMAIN|@NAME', %{ The domain name of the bus to interact with, or a reference (`NAME`) to global configuration. }) do |v| config.bus = v end p.on('-t', '--token TOKEN', %{ An API token to use when querying the bus. }) do |v| config.token = v end p.on('-v', '--verbose', %{ Increase logging verbosity }) do config.verbose = true end end end