def self.to_commander(instance=Commander::Runner.instance)
global_options.each do |args, block|
opts = (args.pop if Hash === args.last) || {}
option = instance.global_option(*args, &block).last
option.merge!(opts)
end
commands.each_pair do |name, opts|
instance.command name do |c|
c.description = opts[:description]
c.summary = opts[:summary]
c.syntax = opts[:syntax]
(options_metadata = opts[:options] || []).each do |o|
option_data = [o[:switches], o[:description]].flatten(1)
c.option *option_data
o[:arg] = Commander::Runner.switch_to_sym(o[:switches].last)
end
deprecated[name.to_sym] = opts[:deprecated] unless opts[:deprecated].nil?
args_metadata = opts[:args] || []
args_metadata.each do |arg_meta|
arg_switches = arg_meta[:switches]
unless arg_switches.nil? or arg_switches.empty?
arg_switches << arg_meta[:description]
c.option *arg_switches
end
end
unless opts[:aliases].nil?
opts[:aliases].each do |a|
alias_cmd = a[:action]
unless a[:root_command]
alias_components = name.split(" ")
alias_components[-1] = a[:action]
alias_cmd = alias_components.join(' ').to_sym
end
deprecated[alias_cmd] = true if a[:deprecated]
instance.alias_command "#{alias_cmd}", "#{name}""#{name}"
end
end
c.when_called do |args, options|
config = global_config_setup(options)
deprecated?
cmd = opts[:class].new
cmd.options = options
cmd.config = config
filled_args = cmd.validate_args_and_options(args_metadata, options_metadata, args)
needs_configuration!(cmd, options, config)
cmd.send(opts[:method], *filled_args)
end
end
end
self
end