diff --git a/red/runtime/nodes/flows/util.js b/red/runtime/nodes/flows/util.js index 16b9f461b..e7664715f 100644 --- a/red/runtime/nodes/flows/util.js +++ b/red/runtime/nodes/flows/util.js @@ -37,7 +37,8 @@ function diffNodes(oldNode,newNode) { return false; } -var EnvVarPropertyRE = /^\$\((\S+)\)$/; +var EnvVarPropertyRE_old = /^\$\((\S+)\)$/; +var EnvVarPropertyRE = /^\${(\S+)}$/; function mapEnvVarProperties(obj,prop) { if (Buffer.isBuffer(obj[prop])) { @@ -47,11 +48,9 @@ function mapEnvVarProperties(obj,prop) { mapEnvVarProperties(obj[prop],i); } } else if (typeof obj[prop] === 'string') { - var m; - if ( (m = EnvVarPropertyRE.exec(obj[prop])) !== null) { - if (process.env.hasOwnProperty(m[1])) { - obj[prop] = process.env[m[1]]; - } + if (obj[prop][0] === "$" && (EnvVarPropertyRE_old.test(obj[prop]) || EnvVarPropertyRE.test(obj[prop])) ) { + var envVar = obj[prop].substring(2,obj[prop].length-1); + obj[prop] = process.env.hasOwnProperty(envVar)?process.env[envVar]:obj[prop]; } } else { for (var p in obj[prop]) { @@ -203,7 +202,7 @@ module.exports = { var linkMap = {}; var changedTabs = {}; - + // Look for tabs that have been removed for (id in oldConfig.flows) { if (oldConfig.flows.hasOwnProperty(id) && (!newConfig.flows.hasOwnProperty(id))) { diff --git a/test/red/runtime/nodes/flows/util_spec.js b/test/red/runtime/nodes/flows/util_spec.js index 2cdc72fb3..184aaa70c 100644 --- a/test/red/runtime/nodes/flows/util_spec.js +++ b/test/red/runtime/nodes/flows/util_spec.js @@ -35,10 +35,17 @@ describe('flows/util', function() { }); describe('#mapEnvVarProperties',function() { - it('handles ENV substitutions in an object', function() { + before(function() { process.env.foo1 = "bar1"; process.env.foo2 = "bar2"; process.env.foo3 = "bar3"; + }) + after(function() { + delete process.env.foo1; + delete process.env.foo2; + delete process.env.foo3; + }) + it('handles ENV substitutions in an object - $()', function() { var foo = {a:"$(foo1)",b:"$(foo2)",c:{d:"$(foo3)"}}; for (var p in foo) { if (foo.hasOwnProperty(p)) { @@ -47,6 +54,15 @@ describe('flows/util', function() { } foo.should.eql({ a: 'bar1', b: 'bar2', c: { d: 'bar3' } } ); }); + it('handles ENV substitutions in an object - ${}', function() { + var foo = {a:"${foo1}",b:"${foo2}",c:{d:"${foo3}"}}; + for (var p in foo) { + if (foo.hasOwnProperty(p)) { + flowUtil.mapEnvVarProperties(foo,p); + } + } + foo.should.eql({ a: 'bar1', b: 'bar2', c: { d: 'bar3' } } ); + }); }); describe('#diffNodes',function() {