node package manager

rules-engine

A node.js module to check if an event array matches some specifications. Usefull when you want to compare many rules with many events and check if the final output is true/false.

node-rules-engine

A node.js module to check if an event array matches some specifications. Usefull when you want to compare many rules with many events and check if the final output is true/false.

Dial Once uses this module to easily check if a user match a goal/funnel using our interfaces. See exemple below for a more explanatory exemple.

installation

npm install rules-engine
var engine = require('rules-engine');
engine.apply(events, rules).then(function(result){
  console.log(result); //boolean, true if events are matching rules, false otherwise 
});

example

We want here to check if user viewed page 1, page 3, and then made a click (basic conversion test). ('page' and 'click' here are arbitrary and you can use whatever you want)

 
var engine = require('rules-engine');
 
var events = [
  {'page': {val: 1}},
  {'page': {val: 3}},
  {'click': {val: true}}
];
 
var rules = [
  {'page': {val: 1, should: true}},
  {'page': {val: 3, should: true}},
  {'click': {val: true, should: true}}
];
 
engine.apply(events, rules).then(function(result){
  console.log(result); //true! 
});

Then things can be a bit more complicated, if we want to check if user viewed page 1, 3 but did not make any click:

var rules = [
  {'page': {val: 1, should: true}},
  {'page': {val: 3, should: true}},
  {'click': {val: true, should: false}}
];
engine.apply(events, rules).then(function(result){
  console.log(result); //false! 
});

Some more cases can be handled, like 'user viewed either page 1, 2, or 3 and made a click:

var rules = [
  {'page': {val: [1, 2, 3], should: true}},
  {'click': {val: true, should: true}}
];

User viewed any page:

var rules = [
  {'page': {val: '*', should: true}}
];

User viewed any page BUT page 3:

var rules = [
  {'page': {val: '*', should: true}},
  {'page': {val: 3, should: false}}
];

complex rules exemple

The following rules can be used in val to compute complex rules:

{$gt: 0} //true if event val is greater than the value 
{$lt: 0} //true if event val is lesser than the value 
{$gte: 0} //greater than or equal 
{$lte: 0} //lesser than or equal 

Value can be a Date, number, string, etc. Anything natively comparable in JS

User should have made more than 10 clicks:

var events = [
 {'clicks': {val: 12}}
];
var rules = [
  {'clicks': {val: {$gt: 10}, should: true}}
];