Browse Source

replace operations on Dish with apply

d98762625 6 năm trước cách đây
mục cha
commit
fa87fc8325
2 tập tin đã thay đổi với 25 bổ sung10 xóa
  1. 10 5
      src/node/SyncDish.mjs
  2. 15 5
      test/tests/nodeApi/nodeApi.mjs

+ 10 - 5
src/node/SyncDish.mjs

@@ -9,7 +9,6 @@ import Utils from "../core/Utils";
 import Dish from "../core/Dish";
 import BigNumber from "bignumber.js";
 import log from "loglevel";
-import * as ops from "./index";
 
 /**
  * Subclass of Dish where `get` and `_translate` are synchronous.
@@ -32,11 +31,17 @@ class SyncDish extends Dish {
         }
 
         super(inputOrDish, type);
+    }
 
-        // Add operations to make it composable
-        for (const op in ops) {
-            this[op] = () => ops[op](this.value);
-        }
+    /**
+     * Apply the inputted operation to the dish.
+     *
+     * @param {WrappedOperation} operation the operation to perform
+     * @param {*} args - any arguments for the operation
+     * @returns {Dish} a new dish with the result of the operation.
+     */
+    apply(operation, args=null) {
+        return operation(this.value, args);
     }
 
     /**

+ 15 - 5
test/tests/nodeApi/nodeApi.mjs

@@ -17,7 +17,7 @@ import OperationError from "../../../src/core/errors/OperationError";
 import SyncDish from "../../../src/node/SyncDish";
 import fs from "fs";
 
-import { toBase32, Dish } from "../../../src/node/index";
+import { toBase32, Dish, SHA3 } from "../../../src/node/index";
 import TestRegister from "../../TestRegister";
 
 TestRegister.addApiTests([
@@ -324,18 +324,18 @@ TestRegister.addApiTests([
         assert.strictEqual(dish.type, 0);
     }),
 
-    it("Composable Dish: constructed dish should have operation prototype functions", () => {
+    it("Composable Dish: constructed dish should have apply prototype functions", () => {
         const dish = new Dish();
-        assert.ok(dish.translateDateTimeFormat);
-        assert.ok(dish.stripHTTPHeaders);
+        assert.ok(dish.apply);
         assert.throws(() => dish.someInvalidFunction());
     }),
 
     it("Composable Dish: composed function returns another dish", () => {
-        const result = new Dish("some input").toBase32();
+        const result = new Dish("some input").apply(toBase32);
         assert.ok(result instanceof SyncDish);
     }),
 
+
     it("Composable dish: infers type from input if needed", () => {
         const dish = new Dish("string input");
         assert.strictEqual(dish.type, 1);
@@ -357,6 +357,16 @@ TestRegister.addApiTests([
         fs.unlinkSync("test.txt");
     }),
 
+    it("Composable Dish: apply should allow set of arguments for operation", () => {
+        const result = new Dish("input").apply(SHA3, {size: "256"});
+        assert.strictEqual(result.toString(), "7640cc9b7e3662b2250a43d1757e318bb29fb4860276ac4373b67b1650d6d3e3");
+    }),
+
+    it("Composable Dish: apply functions can be chained", () => {
+        const result = new Dish("input").apply(toBase32).apply(SHA3, {size: "224"});
+        assert.strictEqual(result.toString(), "493e8136b759370a415ef2cf2f7a69690441ff86592aba082bc2e2e0");
+    }),
+
     it("Excluded operations: throw a sensible error when you try and call one", () => {
         try {
             chef.fork();