зеркало из https://github.com/github/ruby.git
[ruby/optparse] Add `raise_unknown` flag
(https://github.com/ruby/optparse/pull/38) https://github.com/ruby/optparse/commit/12529653cd
This commit is contained in:
Родитель
dcf94e719c
Коммит
0bfb185654
|
@ -1148,6 +1148,7 @@ XXX
|
|||
@summary_indent = indent
|
||||
@default_argv = ARGV
|
||||
@require_exact = false
|
||||
@raise_unknown = true
|
||||
add_officious
|
||||
yield self if block_given?
|
||||
end
|
||||
|
@ -1225,6 +1226,9 @@ XXX
|
|||
# abbreviated long option as short option).
|
||||
attr_accessor :require_exact
|
||||
|
||||
# Whether to raise at unknown option.
|
||||
attr_accessor :raise_unknown
|
||||
|
||||
#
|
||||
# Heading banner preceding summary.
|
||||
#
|
||||
|
@ -1639,9 +1643,11 @@ XXX
|
|||
begin
|
||||
sw, = complete(:long, opt, true)
|
||||
if require_exact && !sw.long.include?(arg)
|
||||
throw :terminate, arg unless raise_unknown
|
||||
raise InvalidOption, arg
|
||||
end
|
||||
rescue ParseError
|
||||
throw :terminate, arg unless raise_unknown
|
||||
raise $!.set_option(arg, true)
|
||||
end
|
||||
begin
|
||||
|
@ -1673,6 +1679,7 @@ XXX
|
|||
end
|
||||
end
|
||||
rescue ParseError
|
||||
throw :terminate, arg unless raise_unknown
|
||||
raise $!.set_option(arg, true)
|
||||
end
|
||||
begin
|
||||
|
|
|
@ -98,6 +98,18 @@ class TestOptionParser < Test::Unit::TestCase
|
|||
assert_raise(OptionParser::InvalidOption) {@opt.parse(%w(-z foo))}
|
||||
end
|
||||
|
||||
def test_raise_unknown
|
||||
@opt.def_option('--foo [ARG]') {|arg| @foo = arg}
|
||||
assert @opt.raise_unknown
|
||||
|
||||
@opt.raise_unknown = false
|
||||
assert_equal(%w[--bar], @opt.parse(%w[--foo --bar]))
|
||||
assert_nil(@foo)
|
||||
|
||||
assert_equal(%w[--bar], @opt.parse(%w[--foo x --bar]))
|
||||
assert_equal("x", @foo)
|
||||
end
|
||||
|
||||
def test_nonopt_pattern
|
||||
@opt.def_option(/^[^-]/) do |arg|
|
||||
assert(false, "Never gets called")
|
||||
|
|
Загрузка…
Ссылка в новой задаче