Feature #8460 » 0001-Add-keep_unknown-option.patch
| lib/optparse.rb | ||
|---|---|---|
|
@default_argv = ARGV
|
||
|
@require_exact = false
|
||
|
@raise_unknown = true
|
||
|
@keep_unknown = false
|
||
|
add_officious
|
||
|
yield self if block_given?
|
||
|
end
|
||
| ... | ... | |
|
# Whether to raise at unknown option.
|
||
|
attr_accessor :raise_unknown
|
||
|
# Unknown arguments are left alone.
|
||
|
attr_accessor :keep_unknown
|
||
|
#
|
||
|
# Heading banner preceding summary.
|
||
|
#
|
||
| ... | ... | |
|
raise InvalidOption, arg
|
||
|
end
|
||
|
rescue ParseError
|
||
|
throw :terminate, arg unless raise_unknown
|
||
|
raise $!.set_option(arg, true)
|
||
|
if !keep_unknown
|
||
|
throw :terminate, arg unless raise_unknown
|
||
|
raise $!.set_option(arg, true)
|
||
|
else
|
||
|
nonopt.call(arg)
|
||
|
next
|
||
|
end
|
||
|
end
|
||
|
begin
|
||
|
opt, cb, val = sw.parse(rest, argv) {|*exc| raise(*exc)}
|
||
| ... | ... | |
|
end
|
||
|
end
|
||
|
rescue ParseError
|
||
|
throw :terminate, arg unless raise_unknown
|
||
|
raise $!.set_option(arg, true)
|
||
|
if !keep_unknown
|
||
|
throw :terminate, arg unless raise_unknown
|
||
|
raise $!.set_option(arg, true)
|
||
|
else
|
||
|
nonopt.call(arg)
|
||
|
next
|
||
|
end
|
||
|
end
|
||
|
begin
|
||
|
opt, cb, val = sw.parse(val, argv) {|*exc| raise(*exc) if eq}
|
||
| test/optparse/test_optparse.rb | ||
|---|---|---|
|
e = assert_raise(OptionParser::InvalidOption) {@opt.parse(%w(-t))}
|
||
|
assert_equal(["-t"], e.args)
|
||
|
end
|
||
|
def test_keep_unknown
|
||
|
@opt.def_option('-x')
|
||
|
assert_raise(OptionParser::InvalidOption) {@opt.parse(%w(--mis))}
|
||
|
@opt.keep_unknown = true
|
||
|
assert_equal(%w(--mis arg), @opt.parse(%w(--mis -x arg)))
|
||
|
end
|
||
|
end
|
||