Light weight aspect oriented library which enable validating functions based on contracts. the library also enables to define pre and post activities before function. or use your a predefined skin ( or more than one) which will be activated before and after the function body. By proactively providing contract based API for your public API, you enable a reliable dependency to and from your packages.
To use with node:
$ npm install skinjs
add the required library in your code:
var AV = require('skinjs').aspect;
var AB = AV.aspectBuilder;
var C = require('skinjs').contracts;
Then you can provide a contract to your function and attach before and after functions:
const aspect = AV.aspectBuilder();
const log = (x) => console.log("before:", x);
this.x = "yooo";
const func = aspect.before(function () {
this.start = new Date();
return R.slice(0, Infinity, arguments);
}).after(function (result) {
assert.equal(this.x, "yooo");
}).bind(this)
.validate(C.integer32, C.string)
.for((y) => y + '');
you can also provide a skin ( or more then one) that will be activated before and after the function:
const aspect = AV.aspectBuilder();
function long(y){
for (let i=0;i<1000000;i++) {}
return "done";
}
const perfSkin = function (filename) {
const atom = {};
atom.context = atom;
atom.before = function () {
this.start = new Date();
};
atom.after = function () {
console.log(( filename || '') +': function ' + atom.__funcName + ' took ' +
(new Date().getTime() - this.start.getTime() ) + ' ms to generate ' + arguments[0] );
};
return atom;
};
const func = aspect.use(perfSkin(__filename)).validate(C.integer32, C.string)
.for(long);
Console:
To run the test suite from the console, you need to have mocha
installed:
$ npm install -g mocha
Then from the root of the project, you can just call
$ mocha
Alternately, if you've installed the dependencies, via:
$ npm install
then you can run the tests (and get detailed output) by running:
$ gulp test