Class: Methadone::OptionParserProxy
- Inherits:
- BasicObject
- Defined in:
- lib/methadone/main.rb
Overview
Methadone Internal - treat as private
A proxy to OptionParser that intercepts #on so that we can allow a simpler interface
Instance Method Summary collapse
-
#arg(arg_name, *options) ⇒ Object
Sets the banner to include these arg names.
-
#banner=(new_banner) ⇒ Object
Proxies to underlying OptionParser.
- #check_args! ⇒ Object
- #description(desc) ⇒ Object
-
#initialize(option_parser, options) ⇒ OptionParserProxy
constructor
Create the proxy.
-
#method_missing(sym, *args, &block) ⇒ Object
Defers all calls save #on to the underlying OptionParser instance.
-
#on(*args, &block) ⇒ Object
If invoked as with OptionParser, behaves the exact same way.
-
#post_setup ⇒ Object
We need some documentation to appear at the end, after all OptionParser setup has occured, but before we actually start.
-
#to_s ⇒ Object
Since we extend Object on 1.8.x, to_s is defined and thus not proxied by method_missing.
-
#version(version) ⇒ Object
Sets the version for the banner.
Constructor Details
#initialize(option_parser, options) ⇒ OptionParserProxy
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
393 394 395 396 397 398 399 400 401 402 403 404 |
# File 'lib/methadone/main.rb', line 393 def initialize(option_parser,) @option_parser = option_parser @options = @user_specified_banner = false @accept_options = false @args = [] @arg_options = {} @arg_documentation = {} @description = nil @version = nil end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(sym, *args, &block) ⇒ Object
Defers all calls save #on to the underlying OptionParser instance
466 467 468 |
# File 'lib/methadone/main.rb', line 466 def method_missing(sym,*args,&block) @option_parser.send(sym,*args,&block) end |
Instance Method Details
#arg(arg_name, *options) ⇒ Object
Sets the banner to include these arg names
447 448 449 450 451 452 453 454 455 456 457 |
# File 'lib/methadone/main.rb', line 447 def arg(arg_name,*) << :optional if .include?(:any) && !.include?(:optional) << :required unless .include? :optional << :one unless .include?(:any) || .include?(:many) @args << arg_name @arg_options[arg_name] = .select { |_| _.kind_of? ::String }.each do |doc| @arg_documentation[arg_name] = doc + (.include?(:optional) ? " (optional)" : "") end end |
#banner=(new_banner) ⇒ Object
Proxies to underlying OptionParser
441 442 443 444 |
# File 'lib/methadone/main.rb', line 441 def () @option_parser.= @user_specified_banner = true end |
#check_args! ⇒ Object
406 407 408 409 410 411 412 413 414 415 416 |
# File 'lib/methadone/main.rb', line 406 def check_args! ::Hash[@args.zip(::ARGV)].each do |arg_name,arg_value| if @arg_options[arg_name].include? :required if arg_value.nil? = "'#{arg_name.to_s}' is required" = "at least one " + if @arg_options[arg_name].include? :many raise ::OptionParser::ParseError, end end end end |
#description(desc) ⇒ Object
459 460 461 462 |
# File 'lib/methadone/main.rb', line 459 def description(desc) @description = desc end |
#on(*args, &block) ⇒ Object
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.
423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 |
# File 'lib/methadone/main.rb', line 423 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 end |
#post_setup ⇒ Object
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
483 484 485 486 487 488 489 490 491 492 493 |
# File 'lib/methadone/main.rb', line 483 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 |
#to_s ⇒ Object
Since we extend Object on 1.8.x, to_s is defined and thus not proxied by method_missing
471 472 473 |
# File 'lib/methadone/main.rb', line 471 def to_s #::nodoc:: @option_parser.to_s end |
#version(version) ⇒ Object
Sets the version for the banner
476 477 478 479 |
# File 'lib/methadone/main.rb', line 476 def version(version) @version = version end |