# 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