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