From 437b01a0ff080dd16fe6028fadc75718bdb8dff9 Mon Sep 17 00:00:00 2001 From: Nick O'Leary Date: Mon, 9 Nov 2015 11:29:48 +0000 Subject: [PATCH] Move node installer to its own module --- red/nodes/flows/index.js | 30 ++++- red/nodes/index.js | 154 +--------------------- red/nodes/registry/index.js | 5 + red/nodes/registry/installer.js | 149 +++++++++++++++++++++ test/red/nodes/flows/index_spec.js | 46 +++++++ test/red/nodes/index_spec.js | 123 ----------------- test/red/nodes/registry/installer_spec.js | 152 +++++++++++++++++++++ 7 files changed, 387 insertions(+), 272 deletions(-) create mode 100644 red/nodes/registry/installer.js create mode 100644 test/red/nodes/registry/installer_spec.js diff --git a/red/nodes/flows/index.js b/red/nodes/flows/index.js index 2a1149df6..b93fa5acc 100644 --- a/red/nodes/flows/index.js +++ b/red/nodes/flows/index.js @@ -322,7 +322,30 @@ function stop(type,diff) { } - +function checkTypeInUse(id) { + var nodeInfo = typeRegistry.getNodeInfo(id); + if (!nodeInfo) { + throw new Error(log._("nodes.index.unrecognised-id", {id:id})); + } else { + var inUse = {}; + var config = getConfig(); + config.forEach(function(n) { + inUse[n.type] = (inUse[n.type]||0)+1; + }); + var nodesInUse = []; + nodeInfo.types.forEach(function(t) { + if (inUse[t]) { + nodesInUse.push(t); + } + }); + if (nodesInUse.length > 0) { + var msg = nodesInUse.join(", "); + var err = new Error(log._("nodes.index.type-in-use", {msg:msg})); + err.code = "type_in_use"; + throw err; + } + } +} module.exports = { init: init, @@ -362,5 +385,8 @@ module.exports = { handleError: handleError, - handleStatus: handleStatus + handleStatus: handleStatus, + + checkTypeInUse: checkTypeInUse + }; diff --git a/red/nodes/index.js b/red/nodes/index.js index e66f46abf..1f30500b8 100644 --- a/red/nodes/index.js +++ b/red/nodes/index.js @@ -71,163 +71,23 @@ function init(_settings,storage) { registry.init(_settings); } -function checkTypeInUse(id) { - var nodeInfo = registry.getNodeInfo(id); - if (!nodeInfo) { - throw new Error(log._("nodes.index.unrecognised-id", {id:id})); - } else { - var inUse = {}; - var config = flows.getFlows(); - config.forEach(function(n) { - inUse[n.type] = (inUse[n.type]||0)+1; - }); - var nodesInUse = []; - nodeInfo.types.forEach(function(t) { - if (inUse[t]) { - nodesInUse.push(t); - } - }); - if (nodesInUse.length > 0) { - var msg = nodesInUse.join(", "); - var err = new Error(log._("nodes.index.type-in-use", {msg:msg})); - err.code = "type_in_use"; - throw err; - } - } +function disableNode(id) { + flows.checkTypeInUse(id); + return registry.disableNode(id); } -function removeNode(id) { - checkTypeInUse(id); - return registry.removeNode(id); -} - -function removeModule(module) { +function uninstallModule(module) { var info = registry.getModuleInfo(module); if (!info) { throw new Error(log._("nodes.index.unrecognised-module", {module:module})); } else { for (var i=0;i 0) { - log.info(log._("server.added-types")); - for (var i=0;i 0) { + log.info(log._("server.added-types")); + for (var i=0;i