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 | ||