class Raketary::Cmd

@author Jonathan Bradley Whited @since 0.1.0

Attributes

app[R]
leftover_args[R]
name[R]
sub_cmds[R]

Public Class Methods

new(app,name) click to toggle source
# File lib/raketary/cmd.rb, line 27
def initialize(app,name)
  @app = app
  @leftover_args = []
  @name = name
  @sub_cmds = {}
end

Public Instance Methods

parse!(is_app=false) { |op| ... } click to toggle source
# File lib/raketary/cmd.rb, line 34
def parse!(is_app=false)
  parser = OptionParser.new do |op|
    op.program_name = app.name
    op.version = app.version

    op.banner = ''
    op.separator '' if is_app

    if !@sub_cmds.empty?
      op.separator is_app ? 'Commands:' : "[#{@name}] Commands:"

      @sub_cmds.each do |name,sub_cmd|
        name_desc = ''.dup
        name_desc << op.summary_indent
        name_desc << ("%-#{op.summary_width}s #{sub_cmd.desc}" % [name])

        op.separator name_desc
      end
      op.separator ''
    end

    op.separator is_app ? 'Options:' : "[#{@name}] Options:"

    op.on_tail('-h','--help','show this help')

    yield op
  end

  options = {}
  @leftover_args = parser.order!(app.args,into: options).dup

  options.each_key do |key|
    if (key_s = key.to_s).include?('-')
      options[key_s.gsub('-','_').to_sym] = options[key]
      options.delete(key)
    end
  end
  app.options.merge!(options)

  app.parsers << parser

  if !app.args.nil? && !(sub_cmd_name = app.args.shift).nil?
    if !(sub_cmd = @sub_cmds[sub_cmd_name]).nil?
      begin
        sub_cmd.cmd_class.new(app,sub_cmd_name).run
      rescue DoNotRunCmdError => e
        app.soft_error = e.soft_msg
      end
    end
  end

  return parser
end
run() click to toggle source
# File lib/raketary/cmd.rb, line 88
def run
  raise DoNotRunCmdError if app.options[:help] || app.ran_cmd?
end