class Puppet::Util::CommandLine::PuppetOptionParser

This is a command line option parser. It is intended to have an API that is very similar to

the ruby stdlib 'OptionParser' API, for ease of integration into our existing code... however,
However, we've removed the OptionParser-based implementation and are only maintaining the
it's impilemented based on the third-party "trollop" library.  This was done because there
are places where the stdlib OptionParser is not flexible enough to meet our needs.

Attributes

ignore_invalid_options[R]

This parameter, if set, will tell the underlying option parser not to throw an

exception if we pass it options that weren't explicitly registered.  We need this
capability because we need to be able to pass all of the command-line options before
we know which application/face they are going to be running, but the app/face
may specify additional command-line arguments that are valid for that app/face.

Public Class Methods

new(usage_msg = nil) click to toggle source
# File lib/puppet/util/command_line/puppet_option_parser.rb, line 18
def initialize(usage_msg = nil)
  require "puppet/util/command_line/trollop"

  @create_default_short_options = false

  @parser = Trollop::Parser.new do
    banner usage_msg
    create_default_short_options = false
    handle_help_and_version = false
  end

end

Public Instance Methods

ignore_invalid_options=(value) click to toggle source
# File lib/puppet/util/command_line/puppet_option_parser.rb, line 38
def ignore_invalid_options=(value)
  @parser.ignore_invalid_options = value
end
on(*args, &block) click to toggle source
# File lib/puppet/util/command_line/puppet_option_parser.rb, line 42
def on(*args, &block)
  # The 2nd element is an optional "short" representation.
  if args.length == 3
    long, desc, type = args
  elsif args.length == 4
    long, short, desc, type = args
  else
    raise ArgumentError, "this method only takes 3 or 4 arguments. Given: #{args.inspect}"
  end

  options = {
      :long => long,
      :short => short,
      :required => false,
      :callback => pass_only_last_value_on_to(block),
      :multi => true,
  }

  case type
    when :REQUIRED
      options[:type] = :string
    when :NONE
      options[:type] = :flag
    else
      raise PuppetOptionError.new("Unsupported type: '#{type}'")
  end

  @parser.opt long.sub("^--", "").intern, desc, options
end
parse(*args) click to toggle source
# File lib/puppet/util/command_line/puppet_option_parser.rb, line 72
def parse(*args)
  args = args[0] if args.size == 1 and Array === args[0]
  args_copy = args.dup
  begin
    @parser.parse args_copy
  rescue Puppet::Util::CommandLine::Trollop::CommandlineError => err
    raise PuppetOptionError.new("Error parsing arguments", err)
  end
end