class Kozo::CLI
Attributes
args[R]
command_args[R]
parser[R]
Public Class Methods
new(args)
click to toggle source
# File lib/kozo/cli.rb, line 9 def initialize(args) @parser = OptionParser.new("#{File.basename($PROGRAM_NAME)} [global options] command [command options]") do |o| o.on("Global options:") o.on("-v", "--verbose", "Turn on verbose logging") o.on("-h", "--help", "Display this message") { usage } o.separator("\n") o.on("Commands:") commands.each { |(name, description)| o.on(" #{name}#{description.rjust(48)}") } o.separator("\n") end @args = args @command_args = [] parse! end
Public Instance Methods
parse!()
click to toggle source
# File lib/kozo/cli.rb, line 26 def parse! # Parse command line arguments (in order) and extract non-option arguments # (unrecognized option values). Raise for invalid option arguments (unrecognized # option keys). "--foo FOO --bar BAR" will result in "--foo" and "FOO" being parsed # correctly, "--bar" and "BAR" will be extracted. parser.order!(args, into: Kozo.options) { |value| command_args << value } rescue OptionParser::InvalidOption => e @command_args += e.args retry end
start()
click to toggle source
# File lib/kozo/cli.rb, line 37 def start command = command_args.shift return usage unless command klass = "Kozo::Commands::#{command.camelize}".safe_constantize return usage(tail: "#{File.basename($PROGRAM_NAME)}: unknown command: #{command}") unless klass klass .new(command_args) .start end
Private Instance Methods
commands()
click to toggle source
# File lib/kozo/cli.rb, line 60 def commands Commands::Base.descendants.map { |k| [k.name.demodulize.underscore, k.description] } end
usage(code: 1, tail: nil)
click to toggle source
# File lib/kozo/cli.rb, line 53 def usage(code: 1, tail: nil) puts parser.to_s puts tail if tail exit code end