A class to facilitate optional keyword arguments. More specifically, it helps the use of a Hash to mimic the keyword argument system.
Suppose that you introduce keyword arguments "flag" and "number" to the method "hoge" in a class/module Foo. It can be done as follows:
require 'numru/misc/keywordopt'
include NumRu
class Foo
@@opt_hoge = KeywordOpt.new(
['flag', false, 'whether or not ...'],
['number', 1, 'number of ...'],
['help', false, 'show help message']
)
def hoge(regular_arg1, regular_arg2, options=nil)
opt = @@opt_hoge.interpret(options)
if opt['help']
puts @@opt_hoge.help
puts ' Current values='+opt.inspect
raise HelpMessagingException, '** show help message and raise **'
end
# do what you want below
# (options are set in the Hash opt: opt['flag'] and opt['number'])
end
end
Here, the options are defined in the class variable @@opt_hoge with option names, defualt values, and descriptions (for help messaging). One can use the method hoge as follows:
foo = Foo.new
...
x = ...
y = ...
...
foo.hoge( x, y, {'flag'=>true, 'number'=>10} )
Or equivalently,
foo.hoge( x, y, 'flag'=>true, 'number'=>10 )
because '{}' can be omitted here. If you want to show the help message, use
foo.hoge( x, y, 'help'=>true )
Tails of options names can be shortened as long as unambiguous:
foo.hoge( x, y, 'fla'=>true, 'num'=>10 )
This will cause an exception raised with the following help message such as:
\** Description of options **
option name => default value (description), ..:
{ "flag" => false (whether or not ...),
"number" => 1 (number of ...),
"help" => false (show help message)}
Current values={"help"=>true, "number"=>1, "flag"=>false}
NumRu::Misc::HelpMessagingException: ** show help message and raise **
from (irb):78:in `hoge'
from (irb):83
KeywordOpt.new( *args )Constructor.
ARGUMENTS
RETURN VALUE
interpret(hash)Interprets a hash that specifies option values.
ARGUMENTS
RETURN VALUE
POSSIBLE EXCEPTION
helpReturns a help message
RETURN VALUE