OptparsePlus Internal - treat as private
A proxy to OptionParser that intercepts on
so that we can allow a simpler interface
- A
- B
- C
- D
- M
- N
- O
- P
- V
STRINGS_ONLY | = | lambda { |o| o.kind_of?(::String) } |
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
Source: show
# 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
Sets the banner to include these arg names
Source: show
# 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
Source: show
# 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
Source: show
# File lib/optparse_plus/main.rb, line 495 def description(desc) @description = desc set_banner end
Defers all calls save on
to the underlying OptionParser instance
Source: show
# File lib/optparse_plus/main.rb, line 502 def method_missing(sym,*args,&block) @option_parser.send(sym,*args,&block) end
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.
Source: show
# 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
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
Source: show
# 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