Add check for unknown parameters

This commit is contained in:
Jermolene
2018-06-21 21:34:01 +01:00
parent d5e926d0c7
commit d6543cfbbf
2 changed files with 21 additions and 8 deletions
+17 -5
View File
@@ -95,8 +95,8 @@ Commander.prototype.executeNextCommand = function() {
this.streams.output.write("Executing command: " + commandName + " " + params.join(" ") + "\n");
}
// Parse named parameters if required
if(command.info.namedParameters) {
params = this.extractNamedParameters(params,command.info.namedParameters);
if(command.info.namedParameterMode) {
params = this.extractNamedParameters(params,command.info.mandatoryParameters,command.info.optionalParameters);
if(typeof params === "string") {
return this.callback(params);
}
@@ -130,23 +130,35 @@ Commander.prototype.executeNextCommand = function() {
};
/*
Given an array of parameter strings `params` in name:value format, and an array of mandatory parameter names in `mandatoryParameters`, returns a hashmap of values or a string if error
Given an array of parameter strings `params` in name:value format, and an array of mandatory parameter names in `mandatoryParameters`, and an array of optional parameters in
`optionalParameter`, returns a hashmap of values or a string if error
*/
Commander.prototype.extractNamedParameters = function(params,mandatoryParameters) {
Commander.prototype.extractNamedParameters = function(params,mandatoryParameters,optionalParameters) {
mandatoryParameters = mandatoryParameters || [];
optionalParameters = optionalParameters || [];
var errors = [],
paramsByName = Object.create(null);
// Extract the parameters
$tw.utils.each(params,function(param) {
var index = param.indexOf(":");
var index = param.indexOf("=");
if(index < 1) {
errors.push("malformed named parameter: '" + param + "'");
}
paramsByName[param.slice(0,index)] = param.slice(index+1);
});
// Check the mandatory parameters are present
$tw.utils.each(mandatoryParameters,function(mandatoryParameter) {
if(!$tw.utils.hop(paramsByName,mandatoryParameter)) {
errors.push("missing mandatory parameter: '" + mandatoryParameter + "'");
}
});
// Check there no parameters that are not mandatory or optional
$tw.utils.each(paramsByName,function(value,name) {
if(mandatoryParameters.indexOf(name) === -1 && optionalParameters.indexOf(name) === -1) {
errors.push("unknown parameter: '" + name + "'");
}
});
// Return any errors
if(errors.length > 0) {
return errors.join(" and\n");
} else {