From da7d854e17c75dabae800ed106cc6c30dca3436d Mon Sep 17 00:00:00 2001 From: Dalton Barreto Date: Fri, 8 Dec 2017 09:38:27 -0200 Subject: [PATCH 01/11] Initial implementation of filters This implementatioon makes it possible to pass an object thought a set of filters that can modify it as they want. This will enable plugins to modify virtually any part of the core UI as long as a filter is available for this. --- src/js/plugin/sdk/stores/PipelineStore.js | 44 +++++++++++++ src/test/units/PipelineStore.test.js | 80 +++++++++++++++++++++++ 2 files changed, 124 insertions(+) create mode 100644 src/js/plugin/sdk/stores/PipelineStore.js create mode 100644 src/test/units/PipelineStore.test.js diff --git a/src/js/plugin/sdk/stores/PipelineStore.js b/src/js/plugin/sdk/stores/PipelineStore.js new file mode 100644 index 000000000..2e0359b70 --- /dev/null +++ b/src/js/plugin/sdk/stores/PipelineStore.js @@ -0,0 +1,44 @@ + +class PipelineStore { + constructor() { + this.PRE_AJAX_REQUEST = "PRE_AJAX_REQUEST"; + this.FILTERS_PIPELINE = {}; + } + + applyFilter(filterName, filterParameters) { + if (this.FILTERS_PIPELINE[filterName]) { + for (let filter of this.FILTERS_PIPELINE[filterName]) { + filter(filterParameters); + } + } + return filterParameters; + }; + + register(filterName, callback) { + + if (!this.FILTERS_PIPELINE[filterName]) { + this.FILTERS_PIPELINE[filterName] = []; + } + + let callBacklist = this.FILTERS_PIPELINE[filterName]; + if (callBacklist.indexOf(callback) === -1) { + this.FILTERS_PIPELINE[filterName].push(callback); + } + }; + + deregister(filterName, callback) { + var callbckPosition = this.FILTERS_PIPELINE[filterName].indexOf(callback); + if (callbckPosition !== -1) { + this.FILTERS_PIPELINE[filterName].splice(callbckPosition, 1); + } + }; + + clearPipeline() { + this.FILTERS_PIPELINE = {}; + }; + +}; + +module.exports = { + PipelineStore: new PipelineStore() +}; diff --git a/src/test/units/PipelineStore.test.js b/src/test/units/PipelineStore.test.js new file mode 100644 index 000000000..a5925fbd1 --- /dev/null +++ b/src/test/units/PipelineStore.test.js @@ -0,0 +1,80 @@ +import {expect} from "chai"; +import {PipelineStore} from "../../js/plugin/sdk/stores/PipelineStore" + +describe("Pipeline tests", function () { + + beforeEach(function (){ + PipelineStore.clearPipeline(); + }); + + it("should add a new function to the pipeline", function () { + var filter = function() {}; + + expect(PipelineStore.FILTERS_PIPELINE[PipelineStore.PRE_AJAX_REQUEST]).to.be.equal(undefined); + PipelineStore.register(PipelineStore.PRE_AJAX_REQUEST, filter); + expect(PipelineStore.FILTERS_PIPELINE[PipelineStore.PRE_AJAX_REQUEST]).to.have.lengthOf(1); + expect(PipelineStore.FILTERS_PIPELINE[PipelineStore.PRE_AJAX_REQUEST][0]).to.be.equal(filter); + }); + + it("should add multiple functions to the pipeline", function () { + var filter = function() {}; + var filter2 = function() {}; + + expect(PipelineStore.FILTERS_PIPELINE[PipelineStore.PRE_AJAX_REQUEST]).to.be.equal(undefined); + PipelineStore.register(PipelineStore.PRE_AJAX_REQUEST, filter); + PipelineStore.register(PipelineStore.PRE_AJAX_REQUEST, filter2); + expect(PipelineStore.FILTERS_PIPELINE[PipelineStore.PRE_AJAX_REQUEST]).to.have.lengthOf(2); + expect(PipelineStore.FILTERS_PIPELINE[PipelineStore.PRE_AJAX_REQUEST][0]).to.be.equal(filter); + expect(PipelineStore.FILTERS_PIPELINE[PipelineStore.PRE_AJAX_REQUEST][1]).to.be.equal(filter2); + }); + + it("should remove a function from the pipeline", function () { + var filter = function() {}; + + expect(PipelineStore.FILTERS_PIPELINE[PipelineStore.PRE_AJAX_REQUEST]).to.be.equal(undefined); + + PipelineStore.register(PipelineStore.PRE_AJAX_REQUEST, filter); + expect(PipelineStore.FILTERS_PIPELINE[PipelineStore.PRE_AJAX_REQUEST]).to.have.lengthOf(1); + + PipelineStore.deregister(PipelineStore.PRE_AJAX_REQUEST, filter); + expect(PipelineStore.FILTERS_PIPELINE[PipelineStore.PRE_AJAX_REQUEST]).to.have.lengthOf(0); + }); + + it("should not error when removing the same function twice", function () { + var filter = function() {}; + + PipelineStore.register(PipelineStore.PRE_AJAX_REQUEST, filter); + + PipelineStore.deregister(PipelineStore.PRE_AJAX_REQUEST, filter); + PipelineStore.deregister(PipelineStore.PRE_AJAX_REQUEST, filter); + expect(PipelineStore.FILTERS_PIPELINE[PipelineStore.PRE_AJAX_REQUEST]).to.have.lengthOf(0); + }); + + it("should not add the same function twice", function () { + var filter = function() {}; + + PipelineStore.register(PipelineStore.PRE_AJAX_REQUEST, filter); + PipelineStore.register(PipelineStore.PRE_AJAX_REQUEST, filter); + expect(PipelineStore.FILTERS_PIPELINE[PipelineStore.PRE_AJAX_REQUEST]).to.have.lengthOf(1); + expect(PipelineStore.FILTERS_PIPELINE[PipelineStore.PRE_AJAX_REQUEST][0]).to.be.equal(filter); + }); + + it("should call all functions of the chosen pipeline", function () { + var filter_one = function(data) { + data.value = data.value + "_filter_one"; + }; + var filter_two = function(data) { + data.value = data.value + "_filter_two"; + }; + PipelineStore.register(PipelineStore.PRE_AJAX_REQUEST, filter_one); + PipelineStore.register(PipelineStore.PRE_AJAX_REQUEST, filter_two); + let filtered_data = PipelineStore.applyFilter(PipelineStore.PRE_AJAX_REQUEST, {value: "initial"}); + expect(filtered_data.value).to.be.equal("initial_filter_one_filter_two"); + }); + + it("should be able to run an empty pipeline", function () { + let filtered_data = PipelineStore.applyFilter(PipelineStore.PRE_AJAX_REQUEST, {value: "initial"}); + expect(filtered_data.value).to.be.equal("initial"); + }); + +}); From ac3fb70787ff81e83b7fbfd87cff2d80a2b7d19d Mon Sep 17 00:00:00 2001 From: Dalton Barreto Date: Fri, 8 Dec 2017 09:47:44 -0200 Subject: [PATCH 02/11] Running PRE_AJAX_REQUEST filter before ajax request --- src/js/helpers/ajaxWrapper.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/js/helpers/ajaxWrapper.js b/src/js/helpers/ajaxWrapper.js index 70f3439eb..268bac871 100644 --- a/src/js/helpers/ajaxWrapper.js +++ b/src/js/helpers/ajaxWrapper.js @@ -1,5 +1,6 @@ import fetch from "isomorphic-fetch"; import Util from "./Util"; +import {PipelineStore} from "../plugin/sdk/stores/PipelineStore"; var uniqueCalls = []; @@ -47,6 +48,10 @@ var ajaxWrapper = function (opts = {}) { }); } + options = PipelineStore.applyFilter( + PipelineStore.PRE_AJAX_REQUEST, + options + ); return fetch(options.url, fetchOptions); }; From 722858b594e4177afbbcdba06e096324813366c3 Mon Sep 17 00:00:00 2001 From: Dalton Barreto Date: Fri, 8 Dec 2017 09:48:14 -0200 Subject: [PATCH 03/11] Publishing PipelineStore to all plugins --- src/js/plugin/PluginLoader.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/js/plugin/PluginLoader.js b/src/js/plugin/PluginLoader.js index d548b83cb..5fcf13a0c 100644 --- a/src/js/plugin/PluginLoader.js +++ b/src/js/plugin/PluginLoader.js @@ -12,6 +12,7 @@ import PluginDispatcherProxy from "./PluginDispatcherProxy"; import MarathonService from "./sdk/services/MarathonService"; import MarathonActions from "./sdk/actions/MarathonActions"; +import PipelineStore from "./sdk/stores/PipelineStore"; const PLUGIN_STARTUP_TIMEOUT = 10000; // in ms @@ -51,6 +52,7 @@ const PluginLoader = { config: Object.freeze(config), MarathonService: MarathonService, MarathonActions: MarathonActions, + PipelineStore: PipelineStore, }); let dispatchToken = PluginDispatcher.register(function (event) { From 8049a6b3587d53aba4688cf6c2a0e92f6e0844ff Mon Sep 17 00:00:00 2001 From: Dalton Barreto Date: Wed, 13 Dec 2017 14:04:47 -0200 Subject: [PATCH 04/11] Correclty exporting symbols from PipelineStore module --- src/js/plugin/PluginLoader.js | 2 +- src/js/plugin/sdk/stores/PipelineStore.js | 33 +++++---- src/test/units/PipelineStore.test.js | 81 +++++++++++++++-------- 3 files changed, 68 insertions(+), 48 deletions(-) diff --git a/src/js/plugin/PluginLoader.js b/src/js/plugin/PluginLoader.js index 5fcf13a0c..fc9b9e1d3 100644 --- a/src/js/plugin/PluginLoader.js +++ b/src/js/plugin/PluginLoader.js @@ -52,7 +52,7 @@ const PluginLoader = { config: Object.freeze(config), MarathonService: MarathonService, MarathonActions: MarathonActions, - PipelineStore: PipelineStore, + PipelineStore: new PipelineStore(), }); let dispatchToken = PluginDispatcher.register(function (event) { diff --git a/src/js/plugin/sdk/stores/PipelineStore.js b/src/js/plugin/sdk/stores/PipelineStore.js index 2e0359b70..8671e3c25 100644 --- a/src/js/plugin/sdk/stores/PipelineStore.js +++ b/src/js/plugin/sdk/stores/PipelineStore.js @@ -1,13 +1,13 @@ -class PipelineStore { - constructor() { - this.PRE_AJAX_REQUEST = "PRE_AJAX_REQUEST"; - this.FILTERS_PIPELINE = {}; - } + +export const FILTERS_PIPELINE = {}; +export const PRE_AJAX_REQUEST = "PRE_AJAX_REQUEST"; + +export default class PipelineStore { applyFilter(filterName, filterParameters) { - if (this.FILTERS_PIPELINE[filterName]) { - for (let filter of this.FILTERS_PIPELINE[filterName]) { + if (FILTERS_PIPELINE[filterName]) { + for (let filter of FILTERS_PIPELINE[filterName]) { filter(filterParameters); } } @@ -16,29 +16,26 @@ class PipelineStore { register(filterName, callback) { - if (!this.FILTERS_PIPELINE[filterName]) { - this.FILTERS_PIPELINE[filterName] = []; + if (!FILTERS_PIPELINE[filterName]) { + FILTERS_PIPELINE[filterName] = []; } - let callBacklist = this.FILTERS_PIPELINE[filterName]; + let callBacklist = FILTERS_PIPELINE[filterName]; if (callBacklist.indexOf(callback) === -1) { - this.FILTERS_PIPELINE[filterName].push(callback); + FILTERS_PIPELINE[filterName].push(callback); } }; deregister(filterName, callback) { - var callbckPosition = this.FILTERS_PIPELINE[filterName].indexOf(callback); + var callbckPosition = FILTERS_PIPELINE[filterName].indexOf(callback); if (callbckPosition !== -1) { - this.FILTERS_PIPELINE[filterName].splice(callbckPosition, 1); + FILTERS_PIPELINE[filterName].splice(callbckPosition, 1); } }; - clearPipeline() { - this.FILTERS_PIPELINE = {}; + getPipeline() { + return FILTERS_PIPELINE; }; }; -module.exports = { - PipelineStore: new PipelineStore() -}; diff --git a/src/test/units/PipelineStore.test.js b/src/test/units/PipelineStore.test.js index a5925fbd1..6270ac91f 100644 --- a/src/test/units/PipelineStore.test.js +++ b/src/test/units/PipelineStore.test.js @@ -1,62 +1,71 @@ import {expect} from "chai"; -import {PipelineStore} from "../../js/plugin/sdk/stores/PipelineStore" +import PipelineStore from "../../js/plugin/sdk/stores/PipelineStore" +import {FILTERS_PIPELINE, PRE_AJAX_REQUEST} from "../../js/plugin/sdk/stores/PipelineStore" + describe("Pipeline tests", function () { beforeEach(function (){ - PipelineStore.clearPipeline(); + for (let a of Object.keys(FILTERS_PIPELINE)){ + delete FILTERS_PIPELINE[a]; + } }); it("should add a new function to the pipeline", function () { var filter = function() {}; - expect(PipelineStore.FILTERS_PIPELINE[PipelineStore.PRE_AJAX_REQUEST]).to.be.equal(undefined); - PipelineStore.register(PipelineStore.PRE_AJAX_REQUEST, filter); - expect(PipelineStore.FILTERS_PIPELINE[PipelineStore.PRE_AJAX_REQUEST]).to.have.lengthOf(1); - expect(PipelineStore.FILTERS_PIPELINE[PipelineStore.PRE_AJAX_REQUEST][0]).to.be.equal(filter); + let pipeline = new PipelineStore(); + expect(FILTERS_PIPELINE[PRE_AJAX_REQUEST]).to.be.equal(undefined); + pipeline.register(PRE_AJAX_REQUEST, filter); + expect(FILTERS_PIPELINE[PRE_AJAX_REQUEST]).to.have.lengthOf(1); + expect(FILTERS_PIPELINE[PRE_AJAX_REQUEST][0]).to.be.equal(filter); }); it("should add multiple functions to the pipeline", function () { var filter = function() {}; var filter2 = function() {}; - expect(PipelineStore.FILTERS_PIPELINE[PipelineStore.PRE_AJAX_REQUEST]).to.be.equal(undefined); - PipelineStore.register(PipelineStore.PRE_AJAX_REQUEST, filter); - PipelineStore.register(PipelineStore.PRE_AJAX_REQUEST, filter2); - expect(PipelineStore.FILTERS_PIPELINE[PipelineStore.PRE_AJAX_REQUEST]).to.have.lengthOf(2); - expect(PipelineStore.FILTERS_PIPELINE[PipelineStore.PRE_AJAX_REQUEST][0]).to.be.equal(filter); - expect(PipelineStore.FILTERS_PIPELINE[PipelineStore.PRE_AJAX_REQUEST][1]).to.be.equal(filter2); + let pipeline = new PipelineStore(); + expect(FILTERS_PIPELINE[PRE_AJAX_REQUEST]).to.be.equal(undefined); + pipeline.register(PRE_AJAX_REQUEST, filter); + pipeline.register(PRE_AJAX_REQUEST, filter2); + expect(FILTERS_PIPELINE[PRE_AJAX_REQUEST]).to.have.lengthOf(2); + expect(FILTERS_PIPELINE[PRE_AJAX_REQUEST][0]).to.be.equal(filter); + expect(FILTERS_PIPELINE[PRE_AJAX_REQUEST][1]).to.be.equal(filter2); }); it("should remove a function from the pipeline", function () { var filter = function() {}; - expect(PipelineStore.FILTERS_PIPELINE[PipelineStore.PRE_AJAX_REQUEST]).to.be.equal(undefined); + let pipeline = new PipelineStore(); + expect(FILTERS_PIPELINE[PRE_AJAX_REQUEST]).to.be.equal(undefined); - PipelineStore.register(PipelineStore.PRE_AJAX_REQUEST, filter); - expect(PipelineStore.FILTERS_PIPELINE[PipelineStore.PRE_AJAX_REQUEST]).to.have.lengthOf(1); + pipeline.register(PRE_AJAX_REQUEST, filter); + expect(FILTERS_PIPELINE[PRE_AJAX_REQUEST]).to.have.lengthOf(1); - PipelineStore.deregister(PipelineStore.PRE_AJAX_REQUEST, filter); - expect(PipelineStore.FILTERS_PIPELINE[PipelineStore.PRE_AJAX_REQUEST]).to.have.lengthOf(0); + pipeline.deregister(PRE_AJAX_REQUEST, filter); + expect(FILTERS_PIPELINE[PRE_AJAX_REQUEST]).to.have.lengthOf(0); }); it("should not error when removing the same function twice", function () { var filter = function() {}; - PipelineStore.register(PipelineStore.PRE_AJAX_REQUEST, filter); + let pipeline = new PipelineStore(); + pipeline.register(PRE_AJAX_REQUEST, filter); - PipelineStore.deregister(PipelineStore.PRE_AJAX_REQUEST, filter); - PipelineStore.deregister(PipelineStore.PRE_AJAX_REQUEST, filter); - expect(PipelineStore.FILTERS_PIPELINE[PipelineStore.PRE_AJAX_REQUEST]).to.have.lengthOf(0); + pipeline.deregister(PRE_AJAX_REQUEST, filter); + pipeline.deregister(PRE_AJAX_REQUEST, filter); + expect(FILTERS_PIPELINE[PRE_AJAX_REQUEST]).to.have.lengthOf(0); }); it("should not add the same function twice", function () { var filter = function() {}; - PipelineStore.register(PipelineStore.PRE_AJAX_REQUEST, filter); - PipelineStore.register(PipelineStore.PRE_AJAX_REQUEST, filter); - expect(PipelineStore.FILTERS_PIPELINE[PipelineStore.PRE_AJAX_REQUEST]).to.have.lengthOf(1); - expect(PipelineStore.FILTERS_PIPELINE[PipelineStore.PRE_AJAX_REQUEST][0]).to.be.equal(filter); + let pipeline = new PipelineStore(); + pipeline.register(PRE_AJAX_REQUEST, filter); + pipeline.register(PRE_AJAX_REQUEST, filter); + expect(FILTERS_PIPELINE[PRE_AJAX_REQUEST]).to.have.lengthOf(1); + expect(FILTERS_PIPELINE[PRE_AJAX_REQUEST][0]).to.be.equal(filter); }); it("should call all functions of the chosen pipeline", function () { @@ -66,15 +75,29 @@ describe("Pipeline tests", function () { var filter_two = function(data) { data.value = data.value + "_filter_two"; }; - PipelineStore.register(PipelineStore.PRE_AJAX_REQUEST, filter_one); - PipelineStore.register(PipelineStore.PRE_AJAX_REQUEST, filter_two); - let filtered_data = PipelineStore.applyFilter(PipelineStore.PRE_AJAX_REQUEST, {value: "initial"}); + + let pipeline = new PipelineStore(); + pipeline.register(PRE_AJAX_REQUEST, filter_one); + pipeline.register(PRE_AJAX_REQUEST, filter_two); + let filtered_data = pipeline.applyFilter(PRE_AJAX_REQUEST, {value: "initial"}); expect(filtered_data.value).to.be.equal("initial_filter_one_filter_two"); }); it("should be able to run an empty pipeline", function () { - let filtered_data = PipelineStore.applyFilter(PipelineStore.PRE_AJAX_REQUEST, {value: "initial"}); + let pipeline = new PipelineStore(); + let filtered_data = pipeline.applyFilter(PRE_AJAX_REQUEST, {value: "initial"}); expect(filtered_data.value).to.be.equal("initial"); }); + it ("should share the same filters between multiple pipeline instances", function (){ + let filter = function (){}; + + let pipeline_one = new PipelineStore(); + let pipeline_two = new PipelineStore(); + pipeline_one.register(PRE_AJAX_REQUEST, filter); + pipeline_two.register(PRE_AJAX_REQUEST, filter); + expect(FILTERS_PIPELINE[PRE_AJAX_REQUEST]).to.have.lengthOf(1); + expect(FILTERS_PIPELINE[PRE_AJAX_REQUEST][0]).to.be.equal(filter); + }); + }); From a2d43b458499ad9e0e9995eb1bed1f236027e349 Mon Sep 17 00:00:00 2001 From: Dalton Barreto Date: Thu, 14 Dec 2017 08:19:40 -0200 Subject: [PATCH 05/11] Fixing call to PipelineStore on ajaxWrapper --- src/js/helpers/ajaxWrapper.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/js/helpers/ajaxWrapper.js b/src/js/helpers/ajaxWrapper.js index 268bac871..2014d19ed 100644 --- a/src/js/helpers/ajaxWrapper.js +++ b/src/js/helpers/ajaxWrapper.js @@ -1,8 +1,9 @@ import fetch from "isomorphic-fetch"; import Util from "./Util"; -import {PipelineStore} from "../plugin/sdk/stores/PipelineStore"; +import PipelineStore from "../plugin/sdk/stores/PipelineStore"; var uniqueCalls = []; +var pipeline = new PipelineStore(); function removeCall(options) { uniqueCalls.splice(uniqueCalls.indexOf(options.url), 1); @@ -48,7 +49,7 @@ var ajaxWrapper = function (opts = {}) { }); } - options = PipelineStore.applyFilter( + options = pipeline.applyFilter( PipelineStore.PRE_AJAX_REQUEST, options ); From efef127e69d38575c43f5b54812a15f3193cc55b Mon Sep 17 00:00:00 2001 From: Dalton Barreto Date: Thu, 14 Dec 2017 08:25:43 -0200 Subject: [PATCH 06/11] Fixing exporting of PipelineHook names --- src/js/plugin/PluginLoader.js | 3 +- src/js/plugin/sdk/stores/PipelineStore.js | 6 +- src/test/units/PipelineStore.test.js | 67 +++++++++++------------ 3 files changed, 40 insertions(+), 36 deletions(-) diff --git a/src/js/plugin/PluginLoader.js b/src/js/plugin/PluginLoader.js index fc9b9e1d3..845185435 100644 --- a/src/js/plugin/PluginLoader.js +++ b/src/js/plugin/PluginLoader.js @@ -12,7 +12,7 @@ import PluginDispatcherProxy from "./PluginDispatcherProxy"; import MarathonService from "./sdk/services/MarathonService"; import MarathonActions from "./sdk/actions/MarathonActions"; -import PipelineStore from "./sdk/stores/PipelineStore"; +import PipelineStore, {Hooks as PipelineHooks} from "./sdk/stores/PipelineStore"; const PLUGIN_STARTUP_TIMEOUT = 10000; // in ms @@ -53,6 +53,7 @@ const PluginLoader = { MarathonService: MarathonService, MarathonActions: MarathonActions, PipelineStore: new PipelineStore(), + PipelineHooks: PipelineHooks, }); let dispatchToken = PluginDispatcher.register(function (event) { diff --git a/src/js/plugin/sdk/stores/PipelineStore.js b/src/js/plugin/sdk/stores/PipelineStore.js index 8671e3c25..112f4fc42 100644 --- a/src/js/plugin/sdk/stores/PipelineStore.js +++ b/src/js/plugin/sdk/stores/PipelineStore.js @@ -1,7 +1,11 @@ export const FILTERS_PIPELINE = {}; -export const PRE_AJAX_REQUEST = "PRE_AJAX_REQUEST"; +const PRE_AJAX_REQUEST = "PRE_AJAX_REQUEST"; + +export const Hooks = { + PRE_AJAX_REQUEST: PRE_AJAX_REQUEST +}; export default class PipelineStore { diff --git a/src/test/units/PipelineStore.test.js b/src/test/units/PipelineStore.test.js index 6270ac91f..fe4452ad6 100644 --- a/src/test/units/PipelineStore.test.js +++ b/src/test/units/PipelineStore.test.js @@ -1,7 +1,6 @@ import {expect} from "chai"; -import PipelineStore from "../../js/plugin/sdk/stores/PipelineStore" -import {FILTERS_PIPELINE, PRE_AJAX_REQUEST} from "../../js/plugin/sdk/stores/PipelineStore" - +import PipelineStore, {Hooks} from "../../js/plugin/sdk/stores/PipelineStore" +import {FILTERS_PIPELINE} from "../../js/plugin/sdk/stores/PipelineStore" describe("Pipeline tests", function () { @@ -15,10 +14,10 @@ describe("Pipeline tests", function () { var filter = function() {}; let pipeline = new PipelineStore(); - expect(FILTERS_PIPELINE[PRE_AJAX_REQUEST]).to.be.equal(undefined); - pipeline.register(PRE_AJAX_REQUEST, filter); - expect(FILTERS_PIPELINE[PRE_AJAX_REQUEST]).to.have.lengthOf(1); - expect(FILTERS_PIPELINE[PRE_AJAX_REQUEST][0]).to.be.equal(filter); + expect(FILTERS_PIPELINE[Hooks.PRE_AJAX_REQUEST]).to.be.equal(undefined); + pipeline.register(Hooks.PRE_AJAX_REQUEST, filter); + expect(FILTERS_PIPELINE[Hooks.PRE_AJAX_REQUEST]).to.have.lengthOf(1); + expect(FILTERS_PIPELINE[Hooks.PRE_AJAX_REQUEST][0]).to.be.equal(filter); }); it("should add multiple functions to the pipeline", function () { @@ -26,46 +25,46 @@ describe("Pipeline tests", function () { var filter2 = function() {}; let pipeline = new PipelineStore(); - expect(FILTERS_PIPELINE[PRE_AJAX_REQUEST]).to.be.equal(undefined); - pipeline.register(PRE_AJAX_REQUEST, filter); - pipeline.register(PRE_AJAX_REQUEST, filter2); - expect(FILTERS_PIPELINE[PRE_AJAX_REQUEST]).to.have.lengthOf(2); - expect(FILTERS_PIPELINE[PRE_AJAX_REQUEST][0]).to.be.equal(filter); - expect(FILTERS_PIPELINE[PRE_AJAX_REQUEST][1]).to.be.equal(filter2); + expect(FILTERS_PIPELINE[Hooks.PRE_AJAX_REQUEST]).to.be.equal(undefined); + pipeline.register(Hooks.PRE_AJAX_REQUEST, filter); + pipeline.register(Hooks.PRE_AJAX_REQUEST, filter2); + expect(FILTERS_PIPELINE[Hooks.PRE_AJAX_REQUEST]).to.have.lengthOf(2); + expect(FILTERS_PIPELINE[Hooks.PRE_AJAX_REQUEST][0]).to.be.equal(filter); + expect(FILTERS_PIPELINE[Hooks.PRE_AJAX_REQUEST][1]).to.be.equal(filter2); }); it("should remove a function from the pipeline", function () { var filter = function() {}; let pipeline = new PipelineStore(); - expect(FILTERS_PIPELINE[PRE_AJAX_REQUEST]).to.be.equal(undefined); + expect(FILTERS_PIPELINE[Hooks.PRE_AJAX_REQUEST]).to.be.equal(undefined); - pipeline.register(PRE_AJAX_REQUEST, filter); - expect(FILTERS_PIPELINE[PRE_AJAX_REQUEST]).to.have.lengthOf(1); + pipeline.register(Hooks.PRE_AJAX_REQUEST, filter); + expect(FILTERS_PIPELINE[Hooks.PRE_AJAX_REQUEST]).to.have.lengthOf(1); - pipeline.deregister(PRE_AJAX_REQUEST, filter); - expect(FILTERS_PIPELINE[PRE_AJAX_REQUEST]).to.have.lengthOf(0); + pipeline.deregister(Hooks.PRE_AJAX_REQUEST, filter); + expect(FILTERS_PIPELINE[Hooks.PRE_AJAX_REQUEST]).to.have.lengthOf(0); }); it("should not error when removing the same function twice", function () { var filter = function() {}; let pipeline = new PipelineStore(); - pipeline.register(PRE_AJAX_REQUEST, filter); + pipeline.register(Hooks.PRE_AJAX_REQUEST, filter); - pipeline.deregister(PRE_AJAX_REQUEST, filter); - pipeline.deregister(PRE_AJAX_REQUEST, filter); - expect(FILTERS_PIPELINE[PRE_AJAX_REQUEST]).to.have.lengthOf(0); + pipeline.deregister(Hooks.PRE_AJAX_REQUEST, filter); + pipeline.deregister(Hooks.PRE_AJAX_REQUEST, filter); + expect(FILTERS_PIPELINE[Hooks.PRE_AJAX_REQUEST]).to.have.lengthOf(0); }); it("should not add the same function twice", function () { var filter = function() {}; let pipeline = new PipelineStore(); - pipeline.register(PRE_AJAX_REQUEST, filter); - pipeline.register(PRE_AJAX_REQUEST, filter); - expect(FILTERS_PIPELINE[PRE_AJAX_REQUEST]).to.have.lengthOf(1); - expect(FILTERS_PIPELINE[PRE_AJAX_REQUEST][0]).to.be.equal(filter); + pipeline.register(Hooks.PRE_AJAX_REQUEST, filter); + pipeline.register(Hooks.PRE_AJAX_REQUEST, filter); + expect(FILTERS_PIPELINE[Hooks.PRE_AJAX_REQUEST]).to.have.lengthOf(1); + expect(FILTERS_PIPELINE[Hooks.PRE_AJAX_REQUEST][0]).to.be.equal(filter); }); it("should call all functions of the chosen pipeline", function () { @@ -77,15 +76,15 @@ describe("Pipeline tests", function () { }; let pipeline = new PipelineStore(); - pipeline.register(PRE_AJAX_REQUEST, filter_one); - pipeline.register(PRE_AJAX_REQUEST, filter_two); - let filtered_data = pipeline.applyFilter(PRE_AJAX_REQUEST, {value: "initial"}); + pipeline.register(Hooks.PRE_AJAX_REQUEST, filter_one); + pipeline.register(Hooks.PRE_AJAX_REQUEST, filter_two); + let filtered_data = pipeline.applyFilter(Hooks.PRE_AJAX_REQUEST, {value: "initial"}); expect(filtered_data.value).to.be.equal("initial_filter_one_filter_two"); }); it("should be able to run an empty pipeline", function () { let pipeline = new PipelineStore(); - let filtered_data = pipeline.applyFilter(PRE_AJAX_REQUEST, {value: "initial"}); + let filtered_data = pipeline.applyFilter(Hooks.PRE_AJAX_REQUEST, {value: "initial"}); expect(filtered_data.value).to.be.equal("initial"); }); @@ -94,10 +93,10 @@ describe("Pipeline tests", function () { let pipeline_one = new PipelineStore(); let pipeline_two = new PipelineStore(); - pipeline_one.register(PRE_AJAX_REQUEST, filter); - pipeline_two.register(PRE_AJAX_REQUEST, filter); - expect(FILTERS_PIPELINE[PRE_AJAX_REQUEST]).to.have.lengthOf(1); - expect(FILTERS_PIPELINE[PRE_AJAX_REQUEST][0]).to.be.equal(filter); + pipeline_one.register(Hooks.PRE_AJAX_REQUEST, filter); + pipeline_two.register(Hooks.PRE_AJAX_REQUEST, filter); + expect(FILTERS_PIPELINE[Hooks.PRE_AJAX_REQUEST]).to.have.lengthOf(1); + expect(FILTERS_PIPELINE[Hooks.PRE_AJAX_REQUEST][0]).to.be.equal(filter); }); }); From 5b811715ed290a7f8fb9440606e436ca36d8a561 Mon Sep 17 00:00:00 2001 From: Dalton Barreto Date: Thu, 14 Dec 2017 09:59:01 -0200 Subject: [PATCH 07/11] Fixing linter errors --- src/js/plugin/PluginLoader.js | 3 ++- src/js/plugin/sdk/stores/PipelineStore.js | 1 - 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/js/plugin/PluginLoader.js b/src/js/plugin/PluginLoader.js index 845185435..f447e7e9f 100644 --- a/src/js/plugin/PluginLoader.js +++ b/src/js/plugin/PluginLoader.js @@ -12,7 +12,8 @@ import PluginDispatcherProxy from "./PluginDispatcherProxy"; import MarathonService from "./sdk/services/MarathonService"; import MarathonActions from "./sdk/actions/MarathonActions"; -import PipelineStore, {Hooks as PipelineHooks} from "./sdk/stores/PipelineStore"; +import PipelineStore, + {Hooks as PipelineHooks} from "./sdk/stores/PipelineStore"; const PLUGIN_STARTUP_TIMEOUT = 10000; // in ms diff --git a/src/js/plugin/sdk/stores/PipelineStore.js b/src/js/plugin/sdk/stores/PipelineStore.js index 112f4fc42..42b898ed8 100644 --- a/src/js/plugin/sdk/stores/PipelineStore.js +++ b/src/js/plugin/sdk/stores/PipelineStore.js @@ -1,5 +1,4 @@ - export const FILTERS_PIPELINE = {}; const PRE_AJAX_REQUEST = "PRE_AJAX_REQUEST"; From e3b89d68dc756bad0d1464e8aab9db2e57f83c79 Mon Sep 17 00:00:00 2001 From: Dalton Barreto Date: Thu, 28 Dec 2017 10:30:56 -0200 Subject: [PATCH 08/11] PipelineStore as a wrapper for PipelineModel All PipelineStores share the same instance of PipelineModel. --- src/js/plugin/sdk/pipeline/PipelineModel.js | 48 ++++++++ .../plugin/sdk/pipeline/PipelineOperations.js | 8 ++ src/js/plugin/sdk/pipeline/PipelineStore.js | 21 ++++ src/js/plugin/sdk/stores/PipelineStore.js | 44 ------- src/test/units/PipelineModel.test.js | 96 ++++++++++++++++ src/test/units/PipelineStore.test.js | 107 +++--------------- 6 files changed, 188 insertions(+), 136 deletions(-) create mode 100644 src/js/plugin/sdk/pipeline/PipelineModel.js create mode 100644 src/js/plugin/sdk/pipeline/PipelineOperations.js create mode 100644 src/js/plugin/sdk/pipeline/PipelineStore.js delete mode 100644 src/js/plugin/sdk/stores/PipelineStore.js create mode 100644 src/test/units/PipelineModel.test.js diff --git a/src/js/plugin/sdk/pipeline/PipelineModel.js b/src/js/plugin/sdk/pipeline/PipelineModel.js new file mode 100644 index 000000000..ab0f7689c --- /dev/null +++ b/src/js/plugin/sdk/pipeline/PipelineModel.js @@ -0,0 +1,48 @@ + +class PipelineModel { + + constructor() { + this.pipelines = new Map(); + }; + + clearPipeline() { + this.pipelines.clear(); + }; + + applyFilter(operationName, filterParameters) { + const pipeline = this.getPipeline(operationName); + + pipeline.forEach((filter) => { + filter(filterParameters); + }); + return filterParameters; + }; + + register(operationName, callback) { + + const pipeline = this.getPipeline(operationName); + + if (pipeline.indexOf(callback) === -1) { + pipeline.push(callback); + } + }; + + deregister(operationName, callback) { + const pipeline = this.getPipeline(operationName); + + var callbckPosition = pipeline.indexOf(callback); + if (callbckPosition !== -1) { + pipeline.splice(callbckPosition, 1); + } + }; + + getPipeline(pipelineName) { + if (!this.pipelines.has(pipelineName)) { + this.pipelines.set(pipelineName, []); + } + return this.pipelines.get(pipelineName); + }; + +}; + +export default new PipelineModel(); diff --git a/src/js/plugin/sdk/pipeline/PipelineOperations.js b/src/js/plugin/sdk/pipeline/PipelineOperations.js new file mode 100644 index 000000000..78a7b90af --- /dev/null +++ b/src/js/plugin/sdk/pipeline/PipelineOperations.js @@ -0,0 +1,8 @@ + +const PRE_AJAX_REQUEST = "PRE_AJAX_REQUEST"; + +const PipelineOperations = { + PRE_AJAX_REQUEST +}; + +export default PipelineOperations; diff --git a/src/js/plugin/sdk/pipeline/PipelineStore.js b/src/js/plugin/sdk/pipeline/PipelineStore.js new file mode 100644 index 000000000..e4677fc63 --- /dev/null +++ b/src/js/plugin/sdk/pipeline/PipelineStore.js @@ -0,0 +1,21 @@ +import PipelineModel from "./PipelineModel"; + +export default class PipelineStore { + + constructor() { + this.pipeline = PipelineModel; + }; + + applyFilter(operationName, filterParameters) { + return this.pipeline.applyFilter(operationName, filterParameters); + }; + + register(operationName, callback) { + return this.pipeline.register(operationName, callback); + }; + + deregister(operationName, callback) { + return this.deregister(operationName, callback); + }; + +}; diff --git a/src/js/plugin/sdk/stores/PipelineStore.js b/src/js/plugin/sdk/stores/PipelineStore.js deleted file mode 100644 index 42b898ed8..000000000 --- a/src/js/plugin/sdk/stores/PipelineStore.js +++ /dev/null @@ -1,44 +0,0 @@ - -export const FILTERS_PIPELINE = {}; -const PRE_AJAX_REQUEST = "PRE_AJAX_REQUEST"; - -export const Hooks = { - PRE_AJAX_REQUEST: PRE_AJAX_REQUEST -}; - -export default class PipelineStore { - - applyFilter(filterName, filterParameters) { - if (FILTERS_PIPELINE[filterName]) { - for (let filter of FILTERS_PIPELINE[filterName]) { - filter(filterParameters); - } - } - return filterParameters; - }; - - register(filterName, callback) { - - if (!FILTERS_PIPELINE[filterName]) { - FILTERS_PIPELINE[filterName] = []; - } - - let callBacklist = FILTERS_PIPELINE[filterName]; - if (callBacklist.indexOf(callback) === -1) { - FILTERS_PIPELINE[filterName].push(callback); - } - }; - - deregister(filterName, callback) { - var callbckPosition = FILTERS_PIPELINE[filterName].indexOf(callback); - if (callbckPosition !== -1) { - FILTERS_PIPELINE[filterName].splice(callbckPosition, 1); - } - }; - - getPipeline() { - return FILTERS_PIPELINE; - }; - -}; - diff --git a/src/test/units/PipelineModel.test.js b/src/test/units/PipelineModel.test.js new file mode 100644 index 000000000..eb634d302 --- /dev/null +++ b/src/test/units/PipelineModel.test.js @@ -0,0 +1,96 @@ +import {expect} from "chai"; +import pipelineModel from "../../js/plugin/sdk/pipeline/PipelineModel" + +import PipelineOperations from "../../js/plugin/sdk/pipeline/PipelineOperations" + +describe("PipelineModel tests", function () { + + beforeEach(function (){ + pipelineModel.clearPipeline(); + }); + + it("should return an empty list for a non-existant pipeline", function () { + expect(pipelineModel.getPipeline(PipelineOperations.PRE_AJAX_REQUEST)).to.have.lengthOf(0); + }); + + it("should clear the pipeline when requested to", function () { + const filter = function () {}; + pipelineModel.getPipeline(PipelineOperations.PRE_AJAX_REQUEST).push(filter); + expect(pipelineModel.getPipeline(PipelineOperations.PRE_AJAX_REQUEST)).to.have.lengthOf(1); + pipelineModel.clearPipeline(); + expect(pipelineModel.getPipeline(PipelineOperations.PRE_AJAX_REQUEST)).to.have.lengthOf(0); + }); + + it("should add a new function to the pipeline", function () { + const filter = function() {}; + + expect(pipelineModel.getPipeline(PipelineOperations.PRE_AJAX_REQUEST)).to.have.lengthOf(0); + pipelineModel.register(PipelineOperations.PRE_AJAX_REQUEST, filter); + expect(pipelineModel.getPipeline(PipelineOperations.PRE_AJAX_REQUEST)).to.have.lengthOf(1); + expect(pipelineModel.getPipeline(PipelineOperations.PRE_AJAX_REQUEST)[0]).to.be.equal(filter); + }); + + it("should add multiple functions to the pipeline", function () { + var filter = function() {}; + var filter2 = function() {}; + + expect(pipelineModel.getPipeline(PipelineOperations.PRE_AJAX_REQUEST)).to.have.lengthOf(0); + pipelineModel.register(PipelineOperations.PRE_AJAX_REQUEST, filter); + pipelineModel.register(PipelineOperations.PRE_AJAX_REQUEST, filter2); + expect(pipelineModel.getPipeline(PipelineOperations.PRE_AJAX_REQUEST)).to.have.lengthOf(2); + expect(pipelineModel.getPipeline(PipelineOperations.PRE_AJAX_REQUEST)[0]).to.be.equal(filter); + expect(pipelineModel.getPipeline(PipelineOperations.PRE_AJAX_REQUEST)[1]).to.be.equal(filter2); + }); + + it("should remove a function from the pipeline", function () { + var filter = function() {}; + + expect(pipelineModel.getPipeline(PipelineOperations.PRE_AJAX_REQUEST)).to.have.lengthOf(0); + + pipelineModel.register(PipelineOperations.PRE_AJAX_REQUEST, filter); + expect(pipelineModel.getPipeline(PipelineOperations.PRE_AJAX_REQUEST)).to.have.lengthOf(1); + + pipelineModel.deregister(PipelineOperations.PRE_AJAX_REQUEST, filter); + expect(pipelineModel.getPipeline(PipelineOperations.PRE_AJAX_REQUEST)).to.have.lengthOf(0); + }); + + it("should not error when removing the same function twice", function () { + var filter = function() {}; + + pipelineModel.register(PipelineOperations.PRE_AJAX_REQUEST, filter); + + pipelineModel.deregister(PipelineOperations.PRE_AJAX_REQUEST, filter); + pipelineModel.deregister(PipelineOperations.PRE_AJAX_REQUEST, filter); + expect(pipelineModel.getPipeline(PipelineOperations.PRE_AJAX_REQUEST)).to.have.lengthOf(0); + }); + + it("should not add the same function twice", function () { + var filter = function() {}; + + pipelineModel.register(PipelineOperations.PRE_AJAX_REQUEST, filter); + pipelineModel.register(PipelineOperations.PRE_AJAX_REQUEST, filter); + expect(pipelineModel.getPipeline(PipelineOperations.PRE_AJAX_REQUEST)).to.have.lengthOf(1); + expect(pipelineModel.getPipeline(PipelineOperations.PRE_AJAX_REQUEST)[0]).to.be.equal(filter); + }); + + it("should call all functions of the chosen pipeline", function () { + var filter_one = function(data) { + data.value = data.value + "_filter_one"; + }; + var filter_two = function(data) { + data.value = data.value + "_filter_two"; + }; + + pipelineModel.register(PipelineOperations.PRE_AJAX_REQUEST, filter_one); + pipelineModel.register(PipelineOperations.PRE_AJAX_REQUEST, filter_two); + let filtered_data = pipelineModel.applyFilter(PipelineOperations.PRE_AJAX_REQUEST, {value: "initial"}); + expect(filtered_data.value).to.be.equal("initial_filter_one_filter_two"); + }); + + it("should be able to run an empty pipeline", function () { + let filtered_data = pipelineModel.applyFilter(PipelineOperations.PRE_AJAX_REQUEST, {value: "initial"}); + expect(filtered_data.value).to.be.equal("initial"); + }); + +}); + diff --git a/src/test/units/PipelineStore.test.js b/src/test/units/PipelineStore.test.js index fe4452ad6..fcd6b0f00 100644 --- a/src/test/units/PipelineStore.test.js +++ b/src/test/units/PipelineStore.test.js @@ -1,102 +1,25 @@ import {expect} from "chai"; -import PipelineStore, {Hooks} from "../../js/plugin/sdk/stores/PipelineStore" -import {FILTERS_PIPELINE} from "../../js/plugin/sdk/stores/PipelineStore" +import PipelineStore from "../../js/plugin/sdk/pipeline/PipelineStore"; +import pipelineModel from "../../js/plugin/sdk/pipeline/PipelineModel"; +import PipelineOperations from "../../js/plugin/sdk/pipeline/PipelineOperations"; -describe("Pipeline tests", function () { +describe("PipelineStore tests", function () { beforeEach(function (){ - for (let a of Object.keys(FILTERS_PIPELINE)){ - delete FILTERS_PIPELINE[a]; - } - }); - - it("should add a new function to the pipeline", function () { - var filter = function() {}; - - let pipeline = new PipelineStore(); - expect(FILTERS_PIPELINE[Hooks.PRE_AJAX_REQUEST]).to.be.equal(undefined); - pipeline.register(Hooks.PRE_AJAX_REQUEST, filter); - expect(FILTERS_PIPELINE[Hooks.PRE_AJAX_REQUEST]).to.have.lengthOf(1); - expect(FILTERS_PIPELINE[Hooks.PRE_AJAX_REQUEST][0]).to.be.equal(filter); - }); - - it("should add multiple functions to the pipeline", function () { - var filter = function() {}; - var filter2 = function() {}; - - let pipeline = new PipelineStore(); - expect(FILTERS_PIPELINE[Hooks.PRE_AJAX_REQUEST]).to.be.equal(undefined); - pipeline.register(Hooks.PRE_AJAX_REQUEST, filter); - pipeline.register(Hooks.PRE_AJAX_REQUEST, filter2); - expect(FILTERS_PIPELINE[Hooks.PRE_AJAX_REQUEST]).to.have.lengthOf(2); - expect(FILTERS_PIPELINE[Hooks.PRE_AJAX_REQUEST][0]).to.be.equal(filter); - expect(FILTERS_PIPELINE[Hooks.PRE_AJAX_REQUEST][1]).to.be.equal(filter2); - }); - - it("should remove a function from the pipeline", function () { - var filter = function() {}; - - let pipeline = new PipelineStore(); - expect(FILTERS_PIPELINE[Hooks.PRE_AJAX_REQUEST]).to.be.equal(undefined); - - pipeline.register(Hooks.PRE_AJAX_REQUEST, filter); - expect(FILTERS_PIPELINE[Hooks.PRE_AJAX_REQUEST]).to.have.lengthOf(1); - - pipeline.deregister(Hooks.PRE_AJAX_REQUEST, filter); - expect(FILTERS_PIPELINE[Hooks.PRE_AJAX_REQUEST]).to.have.lengthOf(0); - }); - - it("should not error when removing the same function twice", function () { - var filter = function() {}; - - let pipeline = new PipelineStore(); - pipeline.register(Hooks.PRE_AJAX_REQUEST, filter); - - pipeline.deregister(Hooks.PRE_AJAX_REQUEST, filter); - pipeline.deregister(Hooks.PRE_AJAX_REQUEST, filter); - expect(FILTERS_PIPELINE[Hooks.PRE_AJAX_REQUEST]).to.have.lengthOf(0); - }); - - it("should not add the same function twice", function () { - var filter = function() {}; - - let pipeline = new PipelineStore(); - pipeline.register(Hooks.PRE_AJAX_REQUEST, filter); - pipeline.register(Hooks.PRE_AJAX_REQUEST, filter); - expect(FILTERS_PIPELINE[Hooks.PRE_AJAX_REQUEST]).to.have.lengthOf(1); - expect(FILTERS_PIPELINE[Hooks.PRE_AJAX_REQUEST][0]).to.be.equal(filter); - }); - - it("should call all functions of the chosen pipeline", function () { - var filter_one = function(data) { - data.value = data.value + "_filter_one"; - }; - var filter_two = function(data) { - data.value = data.value + "_filter_two"; - }; - - let pipeline = new PipelineStore(); - pipeline.register(Hooks.PRE_AJAX_REQUEST, filter_one); - pipeline.register(Hooks.PRE_AJAX_REQUEST, filter_two); - let filtered_data = pipeline.applyFilter(Hooks.PRE_AJAX_REQUEST, {value: "initial"}); - expect(filtered_data.value).to.be.equal("initial_filter_one_filter_two"); - }); - - it("should be able to run an empty pipeline", function () { - let pipeline = new PipelineStore(); - let filtered_data = pipeline.applyFilter(Hooks.PRE_AJAX_REQUEST, {value: "initial"}); - expect(filtered_data.value).to.be.equal("initial"); + pipelineModel.clearPipeline(); }); it ("should share the same filters between multiple pipeline instances", function (){ - let filter = function (){}; - - let pipeline_one = new PipelineStore(); - let pipeline_two = new PipelineStore(); - pipeline_one.register(Hooks.PRE_AJAX_REQUEST, filter); - pipeline_two.register(Hooks.PRE_AJAX_REQUEST, filter); - expect(FILTERS_PIPELINE[Hooks.PRE_AJAX_REQUEST]).to.have.lengthOf(1); - expect(FILTERS_PIPELINE[Hooks.PRE_AJAX_REQUEST][0]).to.be.equal(filter); + const filter = function (){}; + const filter2 = function (){}; + + const pipeline_one = new PipelineStore(); + const pipeline_two = new PipelineStore(); + pipeline_one.register(PipelineOperations.PRE_AJAX_REQUEST, filter); + pipeline_two.register(PipelineOperations.PRE_AJAX_REQUEST, filter2); + expect(pipelineModel.getPipeline(PipelineOperations.PRE_AJAX_REQUEST)).to.have.lengthOf(2); + expect(pipelineModel.getPipeline(PipelineOperations.PRE_AJAX_REQUEST)[0]).to.be.equal(filter); + expect(pipelineModel.getPipeline(PipelineOperations.PRE_AJAX_REQUEST)[1]).to.be.equal(filter2); }); }); From 9c8dd6262c55a86dde3492d91343be5c414e9514 Mon Sep 17 00:00:00 2001 From: Dalton Barreto Date: Thu, 28 Dec 2017 10:33:44 -0200 Subject: [PATCH 09/11] Exporting PipelineStore and PipelineOperations to plugins Each loaded plugin receives a new instance of PipelineStore, as they share the same intenal instance of PipelineModel the same pipeline will be run when any plugin calls `applyFilter()`. --- src/js/plugin/PluginLoader.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/js/plugin/PluginLoader.js b/src/js/plugin/PluginLoader.js index f447e7e9f..a91886a40 100644 --- a/src/js/plugin/PluginLoader.js +++ b/src/js/plugin/PluginLoader.js @@ -12,8 +12,8 @@ import PluginDispatcherProxy from "./PluginDispatcherProxy"; import MarathonService from "./sdk/services/MarathonService"; import MarathonActions from "./sdk/actions/MarathonActions"; -import PipelineStore, - {Hooks as PipelineHooks} from "./sdk/stores/PipelineStore"; +import PipelineStore from "./sdk/pipeline/PipelineStore"; +import PipelineOperations from "./sdk/pipeline/PipelineOperations"; const PLUGIN_STARTUP_TIMEOUT = 10000; // in ms @@ -54,7 +54,7 @@ const PluginLoader = { MarathonService: MarathonService, MarathonActions: MarathonActions, PipelineStore: new PipelineStore(), - PipelineHooks: PipelineHooks, + PipelineOperations: PipelineOperations, }); let dispatchToken = PluginDispatcher.register(function (event) { From f80b7fb49961f4e0b86da3737f8b303686db996e Mon Sep 17 00:00:00 2001 From: Dalton Barreto Date: Thu, 28 Dec 2017 10:34:05 -0200 Subject: [PATCH 10/11] ajaxWrapper using the new PipelineStore to run the pipeline --- src/js/helpers/ajaxWrapper.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/js/helpers/ajaxWrapper.js b/src/js/helpers/ajaxWrapper.js index 2014d19ed..b36e1d8a1 100644 --- a/src/js/helpers/ajaxWrapper.js +++ b/src/js/helpers/ajaxWrapper.js @@ -1,9 +1,10 @@ import fetch from "isomorphic-fetch"; import Util from "./Util"; -import PipelineStore from "../plugin/sdk/stores/PipelineStore"; +import PipelineStore from "../plugin/sdk/pipeline/PipelineStore"; +import PipelineOperations from "../plugin/sdk/pipeline/PipelineOperations"; var uniqueCalls = []; -var pipeline = new PipelineStore(); +const pipeline = new PipelineStore(); function removeCall(options) { uniqueCalls.splice(uniqueCalls.indexOf(options.url), 1); @@ -50,7 +51,7 @@ var ajaxWrapper = function (opts = {}) { } options = pipeline.applyFilter( - PipelineStore.PRE_AJAX_REQUEST, + PipelineOperations.PRE_AJAX_REQUEST, options ); return fetch(options.url, fetchOptions); From 62b91568a87dfb6fed206179779a94f0199c5e45 Mon Sep 17 00:00:00 2001 From: Dalton Barreto Date: Thu, 28 Dec 2017 10:40:29 -0200 Subject: [PATCH 11/11] Making PipelineStore.pipeline read-only --- src/js/plugin/sdk/pipeline/PipelineStore.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/js/plugin/sdk/pipeline/PipelineStore.js b/src/js/plugin/sdk/pipeline/PipelineStore.js index e4677fc63..c90f05fc4 100644 --- a/src/js/plugin/sdk/pipeline/PipelineStore.js +++ b/src/js/plugin/sdk/pipeline/PipelineStore.js @@ -3,7 +3,7 @@ import PipelineModel from "./PipelineModel"; export default class PipelineStore { constructor() { - this.pipeline = PipelineModel; + Object.defineProperty(this, "pipeline", {value: PipelineModel}); }; applyFilter(operationName, filterParameters) {