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 {
+4 -3
View File
@@ -17,7 +17,9 @@ var Server = require("$:/core/modules/server.js").Server;
exports.info = {
name: "listen",
synchronous: true,
namedParameters: [] // Use named parameters, but none of them are mandatory
namedParameterMode: true,
mandatoryParameters: [],
optionalParameters: ["port","host","rootTiddler","renderType","serveType","username","password","pathprefix","debugLevel"]
};
var Command = function(params,commander,callback) {
@@ -25,7 +27,6 @@ var Command = function(params,commander,callback) {
this.params = params;
this.commander = commander;
this.callback = callback;
this.knownParameters = ["port","host","rootTiddler","renderType","serveType","username","password","pathprefix","debugLevel"];
};
Command.prototype.execute = function() {
@@ -35,7 +36,7 @@ Command.prototype.execute = function() {
}
// Set up server
var variables = Object.create(null);
$tw.utils.each(this.knownParameters,function(name) {
$tw.utils.each(exports.info.optionalParameters,function(name) {
if($tw.utils.hop(self.params,name)) {
variables[name] = self.params[name];
}