Project

General

Profile

Feature #11523 ยป optparse-require-exact.patch

jeremyevans0 (Jeremy Evans), 07/01/2019 10:23 PM

View differences:

lib/optparse.rb
@summary_width = width
@summary_indent = indent
@default_argv = ARGV
@require_exact = false
add_officious
yield self if block_given?
end
......
# Strings to be parsed in default.
attr_accessor :default_argv
# Whether to require that options match exactly (disallows providing
# abbreviated long option as short option).
attr_accessor :require_exact
#
# Heading banner preceding summary.
#
......
opt.tr!('_', '-')
begin
sw, = complete(:long, opt, true)
if require_exact && !sw.long.include?(arg)
raise InvalidOption, arg
end
rescue ParseError
raise $!.set_option(arg, true)
end
......
val = arg.delete_prefix('-')
has_arg = true
rescue InvalidOption
raise if require_exact
# if no short options match, try completion with long
# options.
sw, = complete(:long, opt)
test/optparse/test_optparse.rb
assert_equal({host: "localhost", port: 8000, verbose: true}, result)
assert_equal(true, @verbose)
end
def test_require_exact
@opt.def_option('-F', '--irs=IRS', 'irs')
%w(--irs --ir --i -ifoo -i -F -Ffoo).each do |arg|
result = {}
@opt.parse([arg, 'foo'], into: result)
assert_equal({irs: 'foo'}, result)
end
@opt.require_exact = true
%w(--irs -F -Ffoo).each do |arg|
result = {}
@opt.parse([arg, 'foo'], into: result)
assert_equal({irs: 'foo'}, result)
end
assert_raise(OptionParser::InvalidOption) {@opt.parse(%w(--ir foo))}
assert_raise(OptionParser::InvalidOption) {@opt.parse(%w(--i foo))}
assert_raise(OptionParser::InvalidOption) {@opt.parse(%w(-irs foo))}
assert_raise(OptionParser::InvalidOption) {@opt.parse(%w(-ir foo))}
assert_raise(OptionParser::InvalidOption) {@opt.parse(%w(-i foo))}
end
end
    (1-1/1)