From 7fb35060c288909ca79219e382292eefc00649b9 Mon Sep 17 00:00:00 2001 From: Jonathan Bernard Date: Fri, 11 Dec 2015 23:08:53 -0600 Subject: [PATCH] LightOptionParser: multiple options with arguments. Previously if there was an option which took multiple arguments, the parser always returned a flat array of all values given for that option, regardless of how many arguments it expected. E.g. the following: cmd --file-pair f1 f2 --file-pair a b resulted in the following: file-pair: [ f1, f2, a, b ] For the case where the option is defined as taking only one argument, this behavior is unchanged, but for the cases where the option is defined as taking more than one option, an array of arrays is returned instead. For the above example the result is now: file-pair: [ [f1, f2], [a, b] ] The behavior is the same for options with variable arguments. The following: cmd --set f1 f2 --set a b c --set last results in: file-pair: [ [f1, f2], [a, b, c], [last] ] --- build.gradle | 2 +- .../com/jdbernard/util/LightOptionParser.groovy | 11 ++++++----- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/build.gradle b/build.gradle index b9b3a30..9d4711f 100644 --- a/build.gradle +++ b/build.gradle @@ -2,7 +2,7 @@ apply plugin: "groovy" apply plugin: "maven" group = "com.jdbernard" -version = "4.1" +version = "4.2" repositories { mavenLocal() diff --git a/src/main/groovy/com/jdbernard/util/LightOptionParser.groovy b/src/main/groovy/com/jdbernard/util/LightOptionParser.groovy index 9dec682..2d0b211 100644 --- a/src/main/groovy/com/jdbernard/util/LightOptionParser.groovy +++ b/src/main/groovy/com/jdbernard/util/LightOptionParser.groovy @@ -170,12 +170,13 @@ public class LightOptionParser { else { if (!returnOpts.containsKey(optName)) returnOpts[optName] = [] - returnOpts[optName] += retVal - if (optDef.longName) { - if (!returnOpts.containsKey(optDef.longName)) - returnOpts[optDef.longName] = [] - returnOpts[optDef.longName] += retVal } } } + if (optDef.arguments == 1) returnOpts[optName] += retVal + else returnOpts[optName] << retVal + + + if (optDef.longName) + returnOpts[optDef.longName] = returnOpts[optName] } } /// This was not as option, it is an unclaomed argument. else { returnOpts.args << args[i]; i++ } }