Class: DTK::Client::OptionParser

Inherits:
Object
  • Object
show all
Defined in:
lib/parser/adapters/option_parser.rb

Class Method Summary collapse

Class Method Details

.parse_options(command_class, argv) ⇒ Object



42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/parser/adapters/option_parser.rb', line 42

def self.parse_options(command_class,argv)
  args_hash = Hash.new
  unless subcommand = argv[0]
    raise Error.new("No subcommand given")
  end
  method = subcommand.to_sym
  unless parse_info = (command_class.const_get "CLIParseOptions")[subcommand.to_sym]
    return [method,args_hash]
  end
  ::OptionParser.new do|opts|
    opts.banner = "Usage: #{command_class.command_name} #{subcommand} [options]"
    (parse_info[:options]||[]).each do |parse_info_option|
      raise Error.new("missing param name") unless param_name = parse_info_option[:name]
      raise Error.new("missing optparse spec") unless parse_info_option[:optparse_spec]
      opts.on(*parse_info_option[:optparse_spec]) do |val|
        args_hash[param_name.to_s] = val ? val : true
      end
    end

    opts.on('-h', '--help', 'Display this screen') do
      puts opts
      exit
    end
  end.parse!(argv)
  [method,args_hash]
end