1
0
mirror of https://github.com/node-red/node-red.git synced 2023-10-10 13:36:53 +02:00

make $parent access without key return undefined

This commit is contained in:
Hiroyasu Nishiyama 2019-02-05 14:47:30 +09:00
parent 596fbfb517
commit 723e9b3cba
2 changed files with 14 additions and 25 deletions

View File

@ -202,7 +202,7 @@ function getContextStorage(storage) {
function followParentContext(parent, key) { function followParentContext(parent, key) {
if (key === "$parent") { if (key === "$parent") {
return [parent, ""]; return [parent, undefined];
} }
else if (key.startsWith("$parent.")) { else if (key.startsWith("$parent.")) {
var len = "$parent.".length; var len = "$parent.".length;
@ -275,24 +275,16 @@ function createContext(id,seed,parent) {
var result = followParentContext(parent, key); var result = followParentContext(parent, key);
if (result) { if (result) {
var [ctx, new_key] = result; var [ctx, new_key] = result;
if (ctx) { if (ctx && new_key) {
if (new_key === "") {
if (callback) {
return callback(ctx);
}
else {
return ctx;
}
}
return ctx.get(new_key, storage, callback); return ctx.get(new_key, storage, callback);
} }
else { else {
if (callback) { if (callback) {
return callback(undefined); return callback(undefined);
} }
else { else {
return undefined; return undefined;
} }
} }
} }
} else { } else {
@ -365,7 +357,7 @@ function createContext(id,seed,parent) {
var result = followParentContext(parent, key); var result = followParentContext(parent, key);
if (result) { if (result) {
var [ctx, new_key] = result; var [ctx, new_key] = result;
if (ctx) { if (ctx && new_key) {
return ctx.set(new_key, value, storage, callback); return ctx.set(new_key, value, storage, callback);
} }
else { else {

View File

@ -226,33 +226,31 @@ describe('context', function() {
}) })
describe("$parent", function() { describe("$parent", function() {
it('should access $parent', function() { it('should get undefined for $parent without key', function() {
var context0 = Context.get("0","flowA"); var context0 = Context.get("0","flowA");
var context1 = Context.get("1","flowB", context0); var context1 = Context.get("1","flowB", context0);
var parent = context1.get("$parent"); var parent = context1.get("$parent");
parent.should.equal(context0); should.equal(parent, undefined);
}); });
it('should get undefined for $parent of root', function() { it('should get undefined for $parent of root', function() {
var context0 = Context.get("0","flowA"); var context0 = Context.get("0","flowA");
var context1 = Context.get("1","flowB", context0); var context1 = Context.get("1","flowB", context0);
var parent = context1.get("$parent.$parent"); var parent = context1.get("$parent.$parent.K");
should.equal(parent, undefined); should.equal(parent, undefined);
}); });
it('should get $parent', function() { it('should get value in $parent', function() {
var context0 = Context.get("0","flowA"); var context0 = Context.get("0","flowA");
var context1 = Context.get("1","flowB", context0); var context1 = Context.get("1","flowB", context0);
var parent = context1.get("$parent");
context0.set("K", "v"); context0.set("K", "v");
var v = context1.get("$parent.K"); var v = context1.get("$parent.K");
should.equal(v, "v"); should.equal(v, "v");
}); });
it('should set $parent', function() { it('should set value in $parent', function() {
var context0 = Context.get("0","flowA"); var context0 = Context.get("0","flowA");
var context1 = Context.get("1","flowB", context0); var context1 = Context.get("1","flowB", context0);
var parent = context1.get("$parent");
context1.set("$parent.K", "v"); context1.set("$parent.K", "v");
var v = context0.get("K"); var v = context0.get("K");
should.equal(v, "v"); should.equal(v, "v");
@ -270,7 +268,6 @@ describe('context', function() {
}); });
}); });
}); });
describe('external context storage',function() { describe('external context storage',function() {