From a4d7065e42e82354c24203d9b5b82cd9edaa9373 Mon Sep 17 00:00:00 2001 From: d98762625 Date: Mon, 25 Jun 2018 17:58:57 +0100 Subject: [PATCH] add operation input case to chef.search --- src/node/apiUtils.mjs | 24 ++++++++++++++++++------ test/tests/nodeApi/nodeApi.mjs | 6 ++++++ test/tests/nodeApi/ops.mjs | 5 +++++ 3 files changed, 29 insertions(+), 6 deletions(-) diff --git a/src/node/apiUtils.mjs b/src/node/apiUtils.mjs index 63107d51..08a3d62e 100644 --- a/src/node/apiUtils.mjs +++ b/src/node/apiUtils.mjs @@ -89,7 +89,7 @@ export function wrap(OpClass) { * @returns {SyncDish} operation's output, on a Dish. * @throws {OperationError} if the operation throws one. */ - return (input, args=null) => { + const wrapped = (input, args=null) => { const operation = new OpClass(); let dish; @@ -108,6 +108,10 @@ export function wrap(OpClass) { type: operation.outputType }); }; + + // used in chef.help + wrapped.opName = OpClass.name; + return wrapped; } @@ -163,14 +167,22 @@ function extractOperationInfo(Operation) { */ export function help(operations) { return function(searchTerm) { + let sanitised = false; if (typeof searchTerm === "string") { - const operation = operations - .find(o => o.name.toLowerCase() === searchTerm.replace(/ /g, "").toLowerCase()); - if (operation) { - return extractOperationInfo(operation); - } + sanitised = searchTerm; + } else if (typeof searchTerm === "function") { + sanitised = searchTerm.opName; + } + + if (!sanitised) { return null; } + + const operation = operations + .find(o => o.name.toLowerCase() === sanitised.replace(/ /g, "").toLowerCase()); + if (operation) { + return extractOperationInfo(operation); + } return null; }; } diff --git a/test/tests/nodeApi/nodeApi.mjs b/test/tests/nodeApi/nodeApi.mjs index 3535996d..4705829d 100644 --- a/test/tests/nodeApi/nodeApi.mjs +++ b/test/tests/nodeApi/nodeApi.mjs @@ -127,4 +127,10 @@ TestRegister.addApiTests([ const result = chef.help("some invalid function name"); assert.strictEqual(result, null); }), + + it("chef.help: takes a wrapped operation as input", () => { + const result = chef.help(chef.toBase32); + assert.strictEqual(result.name, "toBase32"); + assert.strictEqual(result.module, "Default"); + }) ]); diff --git a/test/tests/nodeApi/ops.mjs b/test/tests/nodeApi/ops.mjs index 95648a0e..633d2f49 100644 --- a/test/tests/nodeApi/ops.mjs +++ b/test/tests/nodeApi/ops.mjs @@ -134,5 +134,10 @@ color: white; assert.strictEqual(result.toString(), "SPI1R1T0"); }), + it("toBase64: editableOptions default", () => { + const result = toBase64("some input"); + assert.strictEqual(result.toString(), "c29tZSBpbnB1dA=="); + }), + ]);