Details
-
Improvement
-
Status: Closed
-
Major
-
Resolution: Fixed
-
2.2.1
Description
It would be nice if OptionAccessor.getProperty() would also use the getParsedOptionValue() before falling back to getOptionValue()
Currently to use a parsed option value you have to do something like
def cliBuilder = new CliBuilder() cliBuilder.d longOpt: 'directory', args: 1, type: File, 'd option' def arguments = cliBuilder.parse args if (!arguments) { System.exit 1 } def directory if (arguments.directory) { directory = arguments.getParsedOptionValue 'directory' } else { directory = System.properties.'user.dir' as File }
if would be nicer to instead just do
def cliBuilder = new CliBuilder() cliBuilder.d longOpt: 'directory', args: 1, type: File, 'd option' def arguments = cliBuilder.parse args if (!arguments) { System.exit 1 } def directory if (arguments.directory) { directory = arguments.directory } else { directory = System.properties.'user.dir' as File }
I think something along the lines of changing
def getProperty(String name) { def methodname = 'getOptionValue' if (name.size() > 1 && name.endsWith('s')) { def singularName = name[0..-2] if (hasOption(singularName)) { name = singularName methodname += 's' } } if (name.size() == 1) name = name as char def result = InvokerHelper.getMetaClass(inner).invokeMethod(inner, methodname, name) if (null == result) result = inner.hasOption(name) if (result instanceof String[]) result = result.toList() return result }
to
def getProperty(String name) { def methodname = 'getOptionValue' if (name.size() > 1 && name.endsWith('s')) { def singularName = name[0..-2] if (hasOption(singularName)) { name = singularName methodname += 's' } } if (name.size() == 1) name = name as char def result = inner.getParsedOptionValue(name) if (null == result) result = InvokerHelper.getMetaClass(inner).invokeMethod(inner, methodname, name) if (null == result) result = inner.hasOption(name) if (result instanceof String[]) result = result.toList() return result }
should do what I mean, as getParsedOptionValue() returns null if no type is set or the type is unknown to the TypeHandler.