mirror of
https://github.com/node-red/node-red.git
synced 2023-10-10 13:36:53 +02:00
Allow the JSONata Expression to handle persistable store.
This commit is contained in:
parent
d21e719cc1
commit
adb0891335
@ -408,9 +408,9 @@ function evaluateJSONataExpression(expr,msg,callback) {
|
|||||||
if (callback) {
|
if (callback) {
|
||||||
// If callback provided, need to override the pre-assigned sync
|
// If callback provided, need to override the pre-assigned sync
|
||||||
// context functions to be their async variants
|
// context functions to be their async variants
|
||||||
bindings.flowContext = function(val) {
|
bindings.flowContext = function(val, store) {
|
||||||
return new Promise((resolve,reject) => {
|
return new Promise((resolve,reject) => {
|
||||||
expr._node.context().flow.get(val, function(err,value) {
|
expr._node.context().flow.get(val, store, function(err,value) {
|
||||||
if (err) {
|
if (err) {
|
||||||
reject(err);
|
reject(err);
|
||||||
} else {
|
} else {
|
||||||
@ -419,9 +419,9 @@ function evaluateJSONataExpression(expr,msg,callback) {
|
|||||||
})
|
})
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
bindings.globalContext = function(val) {
|
bindings.globalContext = function(val, store) {
|
||||||
return new Promise((resolve,reject) => {
|
return new Promise((resolve,reject) => {
|
||||||
expr._node.context().global.get(val, function(err,value) {
|
expr._node.context().global.get(val, store, function(err,value) {
|
||||||
if (err) {
|
if (err) {
|
||||||
reject(err);
|
reject(err);
|
||||||
} else {
|
} else {
|
||||||
|
@ -459,7 +459,7 @@ describe("red/util", function() {
|
|||||||
should.not.exist(result);
|
should.not.exist(result);
|
||||||
});
|
});
|
||||||
it('handles async flow context access', function(done) {
|
it('handles async flow context access', function(done) {
|
||||||
var expr = util.prepareJSONataExpression('$flowContext("foo")',{context:function() { return {flow:{get: function(key,callback) { setTimeout(()=>{callback(null,{'foo':'bar'}[key])},10)}}}}});
|
var expr = util.prepareJSONataExpression('$flowContext("foo")',{context:function() { return {flow:{get: function(key,store,callback) { setTimeout(()=>{callback(null,{'foo':'bar'}[key])},10)}}}}});
|
||||||
util.evaluateJSONataExpression(expr,{payload:"hello"},function(err,value) {
|
util.evaluateJSONataExpression(expr,{payload:"hello"},function(err,value) {
|
||||||
try {
|
try {
|
||||||
should.not.exist(err);
|
should.not.exist(err);
|
||||||
@ -471,7 +471,7 @@ describe("red/util", function() {
|
|||||||
});
|
});
|
||||||
})
|
})
|
||||||
it('handles async global context access', function(done) {
|
it('handles async global context access', function(done) {
|
||||||
var expr = util.prepareJSONataExpression('$globalContext("foo")',{context:function() { return {global:{get: function(key,callback) { setTimeout(()=>{callback(null,{'foo':'bar'}[key])},10)}}}}});
|
var expr = util.prepareJSONataExpression('$globalContext("foo")',{context:function() { return {global:{get: function(key,store,callback) { setTimeout(()=>{callback(null,{'foo':'bar'}[key])},10)}}}}});
|
||||||
util.evaluateJSONataExpression(expr,{payload:"hello"},function(err,value) {
|
util.evaluateJSONataExpression(expr,{payload:"hello"},function(err,value) {
|
||||||
try {
|
try {
|
||||||
should.not.exist(err);
|
should.not.exist(err);
|
||||||
@ -482,6 +482,34 @@ describe("red/util", function() {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
})
|
})
|
||||||
|
it('handles persistable store in flow context access', function(done) {
|
||||||
|
var storeName;
|
||||||
|
var expr = util.prepareJSONataExpression('$flowContext("foo", "flowStoreName")',{context:function() { return {flow:{get: function(key,store,callback) { storeName = store;setTimeout(()=>{callback(null,{'foo':'bar'}[key])},10)}}}}});
|
||||||
|
util.evaluateJSONataExpression(expr,{payload:"hello"},function(err,value) {
|
||||||
|
try {
|
||||||
|
should.not.exist(err);
|
||||||
|
value.should.eql("bar");
|
||||||
|
storeName.should.equal("flowStoreName");
|
||||||
|
done();
|
||||||
|
} catch(err2) {
|
||||||
|
done(err2);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})
|
||||||
|
it('handles persistable store in global context access', function(done) {
|
||||||
|
var storeName;
|
||||||
|
var expr = util.prepareJSONataExpression('$globalContext("foo", "globalStoreName")',{context:function() { return {global:{get: function(key,store,callback) { storeName = store;setTimeout(()=>{callback(null,{'foo':'bar'}[key])},10)}}}}});
|
||||||
|
util.evaluateJSONataExpression(expr,{payload:"hello"},function(err,value) {
|
||||||
|
try {
|
||||||
|
should.not.exist(err);
|
||||||
|
value.should.eql("bar");
|
||||||
|
storeName.should.equal("globalStoreName");
|
||||||
|
done();
|
||||||
|
} catch(err2) {
|
||||||
|
done(err2);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user