class Bosh::Cli::CommandHandler
Attributes
desc[R]
@return [String]
keywords[R]
@return [Array]
options[R]
runner[RW]
@return [Bosh::Cli::Runner]
usage[R]
@return [String]
Public Class Methods
new(klass, method, usage, desc, options = [])
click to toggle source
@param [Class] klass @param [UnboundMethod] method @param [String] usage @param [String] desc
# File lib/cli/command_handler.rb, line 22 def initialize(klass, method, usage, desc, options = []) @klass = klass @method = method @usage = usage @desc = desc @options = options @hints = [] @keywords = [] @parser = OptionParser.new @runner = nil extract_keywords end
Public Instance Methods
has_options?()
click to toggle source
# File lib/cli/command_handler.rb, line 83 def has_options? @options.size > 0 end
options_summary()
click to toggle source
# File lib/cli/command_handler.rb, line 87 def options_summary result = [] padding = 5 margin = @options.inject(0) do |max, (name, _)| [max, name.size].max end @options.each do |(name, desc)| desc = desc.select { |word| word.is_a?(String) } column_width = terminal_width - padding - margin result << name.ljust(margin).make_yellow + " " + desc.join(" ").columnize( column_width, [margin + 1, name.size + 1].max) end result.join("\n") end
parse_options(args)
click to toggle source
@param [Array] args Arguments to parse
# File lib/cli/command_handler.rb, line 108 def parse_options(args) @parser.parse!(args) end
run(args, extra_options = {})
click to toggle source
Run handler with provided args @param [Array] args @return [Integer] Command exit code
# File lib/cli/command_handler.rb, line 41 def run(args, extra_options = {}) command = @klass.new(@runner) @options.each do |(name, arguments)| @parser.on(name, *arguments) do |value| command.add_option(format_option_name(name), value) end end extra_options.each_pair do |name, value| command.add_option(format_option_name(name), value) end args = parse_options(args) begin command.send(@method.name, *args) [command.exit_code, command.info] rescue ArgumentError => ex err("#{ex.message}.\n\nUsage: #{usage_with_params}") end end
usage_with_params()
click to toggle source
# File lib/cli/command_handler.rb, line 64 def usage_with_params result = [@usage] @method.parameters.each do |parameter| next if parameter.size < 2 kind, name = parameter if kind == :opt result << "[<#{name}>]" elsif kind == :req result << "<#{name}>" end end @options.each do |(name, _)| result << "[#{name}]" end result.join(" ") end
Private Instance Methods
extract_keywords()
click to toggle source
# File lib/cli/command_handler.rb, line 125 def extract_keywords words = @usage.split(/\s+/) words.each do |word| break unless word.match(/^[a-z]/i) @keywords << word end end
format_option_name(name)
click to toggle source
# File lib/cli/command_handler.rb, line 114 def format_option_name(name) case name when Symbol name when String name.split(/\s+/)[0].gsub(/^-*/, "").gsub("-", "_").to_sym else name end end