Skip to content

Commit 259aedc

Browse files
adding internal functions into core
1 parent 1665821 commit 259aedc

File tree

1 file changed

+72
-46
lines changed

1 file changed

+72
-46
lines changed

lib/node-rules.js

Lines changed: 72 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -26,28 +26,13 @@
2626

2727
RuleEngine.prototype.register = function(rules) {
2828

29-
if(typeof(rules) == "string") {
30-
31-
rules = JSON.parse(rules);
32-
33-
}
34-
35-
29+
3630
if(rules instanceof Array) {
3731

38-
rules = rules.map(function(rule){
39-
40-
rule.condition = eval("("+rule.condition+")");
41-
return rule;
42-
43-
});
44-
4532
this.rules = this.rules.concat(rules);
4633

4734
} else if(rules !== null && typeof(rules) == "object") {
4835

49-
rules.condition = eval("("+rules.condition+")");
50-
5136
this.rules.push(rules);
5237

5338
}
@@ -76,61 +61,79 @@
7661

7762
//these new attributes have to be in both last session and current session to support
7863
// the compare function
79-
fact.complete = false;
64+
var complete = false;
8065
fact.result = true;
8166

8267
var session = _.clone(fact);
8368
var lastSession = _.clone(fact);
8469
var _rules = this.activeRules;
8570

8671

87-
8872
(function doit(x) {
8973

90-
if (x < _rules.length && session.complete === false) {
9174

92-
var _rule = _rules[x].condition;
75+
var R = {};
76+
77+
R.when = function(outcome) {
78+
79+
if (outcome) {
9380

94-
_rule.call(session, function(outcome) {
95-
96-
if (outcome) {
81+
var _consequence = _rules[x].consequence;
82+
_consequence.call(session, R);
9783

98-
var _consequence = _rules[x].consequence;
99-
100-
_consequence.call(session, function() {
84+
} else {
10185

102-
if (!_.isEqual(lastSession,session)) {
86+
process.nextTick(function(){
87+
R.next();
88+
});
10389

104-
lastSession = _.clone(session);
105-
process.nextTick(function(){
106-
return doit(0);
107-
});
90+
}
91+
92+
}
10893

109-
} else {
110-
111-
process.nextTick(function(){
112-
return doit(x+1);
113-
});
114-
115-
}
94+
R.restart = function() {
11695

117-
});
96+
return doit(0);
11897

119-
} else {
98+
};
12099

121-
process.nextTick(function(){
122-
return doit(x+1);
123-
});
100+
R.stop = function() {
124101

125-
}
102+
complete = true;
103+
return doit(0);
126104

127-
128-
});
105+
};
106+
107+
R.next = function () {
108+
109+
if (!_.isEqual(lastSession,session)) {
110+
111+
lastSession = _.clone(session);
112+
process.nextTick(function(){
113+
R.restart();
114+
});
115+
116+
} else {
117+
118+
process.nextTick(function(){
119+
return doit(x+1);
120+
});
121+
122+
}
123+
124+
}
125+
126+
if (x < _rules.length && complete === false) {
127+
128+
var _rule = _rules[x].condition;
129+
_rule.call(session, R);
129130

130131
} else {
132+
131133
process.nextTick(function(){
132134
return callback(session);
133135
});
136+
134137
}
135138

136139
})(0);
@@ -202,10 +205,33 @@
202205

203206
this.init();
204207

208+
if(typeof(rules) == "string") {
209+
210+
rules = JSON.parse(rules);
211+
212+
}
213+
214+
if(rules instanceof Array) {
215+
216+
rules = rules.map(function(rule){
217+
218+
rule.condition = eval("("+rule.condition+")");
219+
return rule;
220+
221+
});
222+
223+
} else if(rules !== null && typeof(rules) == "object") {
224+
225+
rules.condition = eval("("+rules.condition+")");
226+
227+
}
228+
205229
this.register(rules);
206230

207231
};
208232

233+
234+
209235
module.exports = RuleEngine;
210236

211237
}(module.exports));

0 commit comments

Comments
 (0)