ch-rules
v0.0.11
Published
data mapping rules
Downloads
3
Readme
#CH-rules rule engine for clearing house data transformation
Developer Setup - (local)
Assuming you have node.js installed on your machine, you can download node JS from https://nodejs.org/en/
$> node -v
$> npm install
Developer Setup - (local NPM packages)
This is to package ch-rules as a node-module, and share with other projects
// to create ch-rules npm package
$> npm install
$> npm pack
ch-rules-x.y.z.tgz
// to install ch-rules npm package
$> copy ch-rules*.tgz {yourproject}/.
$> cd {yourproject}
$> npm install ch-rules-x.y.z.tgz --save
examples (Use as npm package)
const rulesEngine = require('ch-rules');
// sample source object
const src = {
"varchar1" : "char1",
"varchar2" : "char2",
"num1" : "1",
"num2" : "2",
"datetime1" : "20160101000000",
"datetime2" : "20160101235959",
"datetime3" : "20160101"
};
// recipe_1
const recipe_1 = {
"source_fields": ["num1", "num2"],
"mapping_rule": "sum($num1, $num2, 100);"
};
// returns '103'
rulesEngine.transformOnRecipe(testSrc, recipe_1);
// receipe_2
const recipe_2 = {
"source_fields": ["varchar1", "varchar2"],
"mapping_rule": "if($varchar1 == 'char1') $=$varchar2; else $='fail';"
};
// returns 'char2' (if statement matches the value of varchar1, returns varchar2)
rulesEngine.transformOnRecipe(testSrc, recipe_2);
unit test
$> npm test
expand the rules engine
This module is open-sources so you are welcome to contribute your own modules
1. create your customer function, e.g. my_function_abc(param1, param2, ... paramN)
2. add following at execFunction() at index.js
case 'my_function_abc':
outputStr = execFuncLib.my_function_abc(param1, param2, ..., paramN);
break;
3. add the impelemtnation of my_function_abc at lib/execfunclib.js
function my_function_abc(param1, param2, ..., paramN){
// simply return 'transformed value is 0'
let result = 'transformed value is 0';
return (result);
}
// and add a line at the bottom to export my_function_abc
module.exports = {
// add the below line:
my_function_abc,
};
4. add unit test case in test/index.test.js
// add following test case
describe('my_function_abc happy path', ()=>{
const recipe = {
"source_fields": ["varchar1", "varchar2"],
"mapping_rule": "my_function_abc($varchar1, $varchar2);"
};
it('my_function should return \'transformed value is 0\')', ()=>{
const result = rules.transformOnRecipe(testSrc, recipe);
expect(result).to.be.equal('transformed value is 0');
});
});
## History
0.0.1 - initial version
0.0.2 - updated with some functions for Telstra FDF
0.0.3 - updated for publish to NPM