arg array options to wrapped func

This commit is contained in:
d98762625 2018-12-07 15:46:05 +00:00
parent 18f6ab451d
commit 19366e3624
2 changed files with 82 additions and 14 deletions

View file

@ -11,7 +11,7 @@
import SyncDish from "./SyncDish"; import SyncDish from "./SyncDish";
import NodeRecipe from "./NodeRecipe"; import NodeRecipe from "./NodeRecipe";
import OperationConfig from "./config/OperationConfig.json"; import OperationConfig from "./config/OperationConfig.json";
import { sanitise } from "./apiUtils"; import { sanitise, removeSubheadingsFromArray, sentenceToCamelCase } from "./apiUtils";
import ExludedOperationError from "../core/errors/ExcludedOperationError"; import ExludedOperationError from "../core/errors/ExcludedOperationError";
@ -58,12 +58,7 @@ function transformArgs(originalArgs, newArgs) {
// See Strings op for example. // See Strings op for example.
const allArgs = Object.assign([], originalArgs).map((a) => { const allArgs = Object.assign([], originalArgs).map((a) => {
if (Array.isArray(a.value)) { if (Array.isArray(a.value)) {
a.value = a.value.filter((v) => { a.value = removeSubheadingsFromArray(a.value);
if (typeof v === "string") {
return !v.match(/^\[[\s\S]*\]$/); // Matches anything surrounded in [ ]
}
return true;
});
} }
return a; return a;
}); });
@ -187,6 +182,23 @@ export function wrap(OpClass) {
// used in chef.help // used in chef.help
wrapped.opName = OpClass.name; wrapped.opName = OpClass.name;
/** */
const addArgs = (op) => {
const result = {};
op.args.forEach((a) => {
if (a.type === "option") {
result[sentenceToCamelCase(a.name)] = removeSubheadingsFromArray(a.value);
} else if (a.type === "toggleString") {
result[sentenceToCamelCase(a.name)] = removeSubheadingsFromArray(a.toggleValues);
}
});
return result;
};
wrapped.args = addArgs(opInstance);
return wrapped; return wrapped;
} }

View file

@ -6,24 +6,61 @@
* @license Apache-2.0 * @license Apache-2.0
*/ */
/**
* someName => Somename
*
* @param {String} str = string to be altered
* @returns {String}
*/
const capitalise = function capitalise(str) {
// Don't edit names that start with 2+ caps
if (/^[A-Z0-9]{2,}/g.test(str)) {
return str;
}
// reserved. Don't change for now.
if (str === "Return") {
return str;
}
return `${str.charAt(0).toUpperCase()}${str.substr(1).toLowerCase()}`;
};
/** /**
* SomeName => someName * SomeName => someName
* @param {String} name - string to be altered * @param {String} name - string to be altered
* @returns {String} decapitalised * @returns {String} decapitalised
*/ */
export function decapitalise(name) { export function decapitalise(str) {
// Don't decapitalise names that start with 2+ caps // Don't decapitalise str that start with 2+ caps
if (/^[A-Z0-9]{2,}/g.test(name)) { if (/^[A-Z0-9]{2,}/g.test(str)) {
return name; return str;
} }
// reserved. Don't change for now. // reserved. Don't change for now.
if (name === "Return") { if (str === "Return") {
return name; return str;
} }
return `${name.charAt(0).toLowerCase()}${name.substr(1)}`; return `${str.charAt(0).toLowerCase()}${str.substr(1)}`;
} }
/**
* Remove strings surrounded with [] from the given array.
*/
export function removeSubheadingsFromArray(array) {
if (Array.isArray(array)) {
return array.filter((i) => {
if (typeof i === "string") {
return !i.match(/^\[[\s\S]*\]$/);
}
return true;
});
}
}
/** /**
* Remove spaces, make lower case. * Remove spaces, make lower case.
* @param str * @param str
@ -31,3 +68,22 @@ export function decapitalise(name) {
export function sanitise(str) { export function sanitise(str) {
return str.replace(/ /g, "").toLowerCase(); return str.replace(/ /g, "").toLowerCase();
} }
/**
* sonething like this => somethingLikeThis
* ABC a sentence => ABCASentence
*/
export function sentenceToCamelCase(str) {
return str.split(" ")
.map((s, index) => {
if (index === 0) {
return decapitalise(s);
}
return capitalise(s);
})
.reduce((prev, curr) => `${prev}${curr}`, "");
}