From a8d0ba8dac609c815a3dcdeb3203574192c9c41d Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Mon, 17 Mar 2025 19:13:47 +0900 Subject: [PATCH] Fix completion of key-value pairs array Enum array may be the list of pairs of key and value. Check if only key is completable, not pair. Fix #93 Fix #94 --- lib/optparse.rb | 2 +- test/optparse/test_placearg.rb | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/optparse.rb b/lib/optparse.rb index fca5663..c9caf32 100644 --- a/lib/optparse.rb +++ b/lib/optparse.rb @@ -1502,7 +1502,7 @@ def make_switch(opts, block = nil) block = notwice(o, block, 'block') when Array, Hash if Array === o - o, v = o.partition {|v| Completion.completable?(v)} + o, v = o.partition {|v,| Completion.completable?(v)} values = notwice(v, values, 'values') unless v.empty? next if o.empty? end diff --git a/test/optparse/test_placearg.rb b/test/optparse/test_placearg.rb index 36edf40..d5be5a6 100644 --- a/test/optparse/test_placearg.rb +++ b/test/optparse/test_placearg.rb @@ -8,6 +8,7 @@ def setup @opt.def_option("--option [VAL]") {|x| @flag = x} @opt.def_option("-T [level]", /^[0-4]$/, Integer) {|x| @topt = x} @opt.def_option("--enum [VAL]", [:Alpha, :Bravo, :Charlie]) {|x| @enum = x} + @opt.def_option("--enumval [VAL]", [[:Alpha, 1], [:Bravo, 2], [:Charlie, 3]]) {|x| @enum = x} @opt.def_option("--integer [VAL]", Integer, [1, 2, 3]) {|x| @integer = x} @opt.def_option("--range [VAL]", Integer, 1..3) {|x| @range = x} @topt = nil @@ -102,6 +103,11 @@ def test_enum assert_equal(:Alpha, @enum) end + def test_enum_pair + assert_equal([], no_error {@opt.parse!(%w"--enumval=A")}) + assert_equal(1, @enum) + end + def test_enum_conversion assert_equal([], no_error {@opt.parse!(%w"--integer=1")}) assert_equal(1, @integer)