pico-engine-core
Advanced tools
Comparing version 0.15.3 to 0.15.4
{ | ||
"name": "pico-engine-core", | ||
"version": "0.15.3", | ||
"version": "0.15.4", | ||
"description": "The core javascript api for the pico-engine. (no http, logging, process management etc...)", | ||
@@ -5,0 +5,0 @@ "main": "src/index.js", |
@@ -337,3 +337,14 @@ var _ = require("lodash"); | ||
[query("getSentAttrs"), {name: "Jim"}], | ||
[query("getSentName"), "Jim"] | ||
[query("getSentName"), "Jim"], | ||
////////////////////////////////////////////////////////////////////////// | ||
//Testing raise <domain> event | ||
[signal("events", "raise_set_name", {name: "Raised"}), []], | ||
[query("getSentAttrs"), {name: "Raised"}], | ||
[query("getSentName"), "Raised"], | ||
[signal("events", "raise_set_name_attr", {name: "Raised-2"}), []], | ||
[query("getSentAttrs"), {name: "Raised-2"}], | ||
[query("getSentName"), "Raised-2"] | ||
], t.end); | ||
@@ -340,0 +351,0 @@ }); |
@@ -0,1 +1,2 @@ | ||
var _ = require("lodash"); | ||
var getArg = require("../getArg"); | ||
@@ -5,3 +6,3 @@ | ||
attrs: function(ctx, args){ | ||
return ctx.event.attrs; | ||
return _.cloneDeep(ctx.event.attrs);//the user may mutate their copy | ||
}, | ||
@@ -28,2 +29,7 @@ attr: function(ctx, args){ | ||
raise: function(ctx, args){ | ||
var revent = getArg(args, "revent", 0); | ||
ctx.raiseEvent(revent); | ||
}, | ||
//TODO this is technically a RuleAction | ||
@@ -30,0 +36,0 @@ //TODO should this rather return info for event to be signaled? |
var _ = require("lodash"); | ||
var cuid = require("cuid"); | ||
var Future = require("fibers/future"); | ||
@@ -6,2 +7,18 @@ var evalRuleInFiber = require("./evalRuleInFiber"); | ||
var runEvent = function(scheduled){ | ||
var rule = scheduled.rule; | ||
var ctx = scheduled.ctx; | ||
ctx.emit("debug", "rule selected: " + rule.rid + " -> " + rule.name); | ||
ctx.rid = rule.rid; | ||
ctx.rule = rule; | ||
ctx.scope = rule.scope; | ||
if(_.has(ctx.rulesets, rule.rid)){ | ||
ctx.modules_used = ctx.rulesets[rule.rid].modules_used; | ||
} | ||
return evalRuleInFiber(rule, ctx); | ||
}; | ||
module.exports = function(ctx, pico_id){ | ||
@@ -15,17 +32,33 @@ ctx.emit("debug", "event being processed"); | ||
var rules = selectRulesToEvalFuture(ctx).wait(); | ||
var responses = _.map(rules, function(rule){ | ||
var schedule = []; | ||
var scheduleEvent = function(ctx){ | ||
var rules = selectRulesToEvalFuture(ctx).wait(); | ||
_.each(rules, function(rule){ | ||
schedule.push({rule: rule, ctx: ctx}); | ||
}); | ||
}; | ||
ctx.emit("debug", "rule selected: " + rule.rid + " -> " + rule.name); | ||
scheduleEvent(ctx); | ||
ctx.rid = rule.rid; | ||
ctx.rule = rule; | ||
ctx.scope = rule.scope; | ||
if(_.has(ctx.rulesets, rule.rid)){ | ||
ctx.modules_used = ctx.rulesets[rule.rid].modules_used; | ||
} | ||
ctx.raiseEvent = function(revent){ | ||
//shape the revent like a normal event | ||
var event = { | ||
eci: ctx.event.eci, | ||
eid: cuid(), | ||
domain: revent.domain, | ||
type: revent.type, | ||
attrs: revent.attributes, | ||
timestamp: new Date() | ||
}; | ||
scheduleEvent(_.assign({}, ctx, {event: event})); | ||
}; | ||
return evalRuleInFiber(rule, ctx); | ||
}); | ||
var responses = []; | ||
//using a while loop b/c schedule is MUTABLE | ||
//Durring execution new events may be `raised` that will mutate the schedule | ||
while(schedule.length > 0){ | ||
responses.push(runEvent(schedule.shift())); | ||
} | ||
var res_by_type = _.groupBy(_.flattenDeep(_.values(responses)), "type"); | ||
@@ -32,0 +65,0 @@ |
55633
1770