ch-rules

0.0.11 • Public • Published

#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

Readme

Keywords

none

Package Sidebar

Install

npm i ch-rules

Weekly Downloads

0

Version

0.0.11

License

UNLICENSED

Last publish

Collaborators

  • sunnyhay