OptparsePlus Internal - treat as private

A proxy to OptionParser that intercepts on so that we can allow a simpler interface

Methods
A
B
C
D
M
N
O
P
V
Constants
STRINGS_ONLY = lambda { |o| o.kind_of?(::String) }
 
Class Public methods
new(option_parser,options)

Create the proxy

option_parser

An OptionParser instance

options

a hash that will store the options set via automatic setting. The caller should retain a reference to this

# File lib/optparse_plus/main.rb, line 428
def initialize(option_parser,options)
  @option_parser = option_parser
  @options = options
  @user_specified_banner = false
  @accept_options = false
  @args = []
  @arg_options = {}
  @arg_documentation = {}
  @description = nil
  @version = nil
  set_banner
  document_help
end
Instance Public methods
arg(arg_name,*options)

Sets the banner to include these arg names

# File lib/optparse_plus/main.rb, line 483
def arg(arg_name,*options)
  options << :optional if options.include?(:any) && !options.include?(:optional)
  options << :required unless options.include? :optional
  options << :one unless options.include?(:any) || options.include?(:many)
  @args << arg_name
  @arg_options[arg_name] = options
  options.select(&STRINGS_ONLY).each do |doc|
    @arg_documentation[arg_name] = doc + (options.include?(:optional) ? " (optional)" : "")
  end
  set_banner
end
banner=(new_banner)

Proxies to underlying OptionParser

# File lib/optparse_plus/main.rb, line 477
def banner=(new_banner)
  @option_parser.banner=new_banner
  @user_specified_banner = true
end
check_args!()
# File lib/optparse_plus/main.rb, line 442
def check_args!
  ::Hash[@args.zip(::ARGV)].each do |arg_name,arg_value|
    if @arg_options[arg_name].include? :required
      if arg_value.nil?
        message = "'#{arg_name.to_s}' is required"
        message = "at least one " + message if @arg_options[arg_name].include? :many
        raise ::OptionParser::ParseError,message
      end
    end
  end
end
description(desc)
# File lib/optparse_plus/main.rb, line 495
def description(desc)
  @description = desc
  set_banner
end
method_missing(sym,*args,&block)

Defers all calls save on to the underlying OptionParser instance

# File lib/optparse_plus/main.rb, line 502
def method_missing(sym,*args,&block)
  @option_parser.send(sym,*args,&block)
end
on(*args,&block)

If invoked as with OptionParser, behaves the exact same way. If invoked without a block, however, the options hash given to the constructor will be used to store the parsed command-line value. See opts in the Main module for how that works.

# File lib/optparse_plus/main.rb, line 459
def on(*args,&block)
  @accept_options = true
  args = add_default_value_to_docstring(*args)
  if block
    @option_parser.on(*args,&block)
  else
    opt_names = option_names(*args)
    @option_parser.on(*args) do |value|
      opt_names.each do |name|
        @options[name] = value
        @options[name.to_s] = value
      end
    end
  end
  set_banner
end
post_setup()

We need some documentation to appear at the end, after all OptionParser setup has occured, but before we actually start. This method serves that purpose

# File lib/optparse_plus/main.rb, line 519
def post_setup
  unless @arg_documentation.empty?
    @option_parser.separator ''
    @option_parser.separator "Arguments:"
    @option_parser.separator ''
    @args.each do |arg|
      @option_parser.separator "    #{arg}"
      @option_parser.separator "        #{@arg_documentation[arg]}"
    end
  end
end
version(version)

Sets the version for the banner

# File lib/optparse_plus/main.rb, line 512
def version(version)
  @version = version
  set_banner
end