Reputation: 19758
I have the following:
final String scriptName = new File(getClass().protectionDomain.codeSource.location.path).getName()
final cli = new CliBuilder(
stopAtNonOption: false,
usage: "${scriptName} ARGUMENTS",
width: 80)
cli.with {
_ longOpt: "known-option-0", args: 1, argName: "KNOWN_OPTION_0", "Known option."
_ longOpt: "known-option-1", args: 1, argName: "KNOWN_OPTION_1", "Known option."
}
I would like to be able to call it with:
options = cli.parse(['--known-option-0=0', '--unknown-option=aoeu', '--known-option-1=1'])
such that there's no parsing error, without having to add --unknown-option to the list of accepted options, and such that both known-option-0 and known-option-1 are set.
If I set:
stopAtNonOption: true,
no error is emitted, but:
options.'known-option-0' == 0
options.'known-option-1' == false
How can I get all known options to be parsed and ignore unknown options?
Upvotes: 1
Views: 1135
Reputation: 19758
class CliParser {
final CliBuilder cli
final List<Cli> options_list = []
final List<String> arguments_list = []
CliParser(CliBuilder cli) {
this.cli = cli
}
Collection getOptions() {
cli.options.getOptions()
}
Cli parse(List<String> args) {
while (args.size() != 0) {
groovy.util.OptionAccessor options = cli.parse(args)
options_list.add(options)
List<String> arguments = options.arguments()
arguments_list.add(arguments[0])
args = (arguments.size() > 1) ? arguments[1..-1] : []
}
return new Cli(options: options_list, arguments: arguments_list)
}
}
class Cli {
List<groovy.util.OptionAccessor> options
List<String> arguments
List<String> arguments() {
arguments
}
List<Option> getOptions() {
options.collect {
it.getOptions()
}
}
Object getProperty(String name) {
final optionAccessor = options
.find {
it.hasOption(name)
}
optionAccessor?.getProperty(name)
}
}
final String scriptName = new File(getClass().protectionDomain.codeSource.location.path).getName()
final cliBuilder = new CliBuilder(
stopAtNonOption: false,
usage: "${scriptName} ARGUMENTS",
width: 80)
cliBuilder.with {
_ longOpt: "known-option-0", args: 1, argName: "KNOWN_OPTION_0", "Known option."
_ longOpt: "known-option-1", args: 1, argName: "KNOWN_OPTION_1", "Known option."
}
final cliParser = new CliParser(cliBuilder)
final cli = cliParser.parse(args)
Upvotes: 1