All Projects → dwango-js → advice.js

dwango-js / advice.js

Licence: MIT license
Simple AOP module

Programming Languages

javascript
184084 projects - #8 most used programming language
Makefile
30231 projects

advice.js

Build Status

Simple AOP library for both Node.js and browsers.

function base() {}

// compose a new function which calls a function after base returns
var fn = advice.after(base, function() {
  console.log('base was called');
});


var obj = {
  foo: function() {}
};

// redefine a method which calls a function after obj.foo returns
advice.after(obj, 'foo', function() {
  console.log('obj.foo was called');
});

Installation

Node

$ npm install advice.js

Bower

$ bower install advice

Documentation

advice.before(base, fn) : function

Return compose a new function which calls a fn before base returns.

Order: fn -> base

advice.before(obj, method, fn) : void

Redefine the obj.method which will be called a fn before the original obj.method is called.

Order: fn -> obj.method

advice.after(base, fn) : function

Return compose a new function which calls a fn after base returns.

Order: base -> fn

advice.after(obj, method, fn) : void

Redefine the obj.method which will be called a fn before obj.method is called.

Order: obj.method -> fn

advice.around(base, fn) : function

Return compose a new function which around the base by fn.

function base() {}
var results = [];
var fn = advice.around(base, function(base, value) {
  var result = 'around: ' + value;
  // before
  results.push('before: ' + value);
  // base
  base('base was called');
  // after 
  results.push('after: ' + value);
  return result;
});
fn('foo'); // 'around: foo'
results.join(', ');// 'before: foo, base: bar, after: foo'

advice.around(obj, method, fn) : void

Redefine the obj.method which around obj.method by fn.

Tests

npm test

License

MIT

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].