Shims or "monkey patches" a function or collection of functions.
Methods:
shimOne()
- wraps the named method of an object in a wrapper functionshim()
- wraps various methods in wrapper functions
API is stable. No tests but it's so simple that's not a big problem - it works!
Replaces obj[methodName] with the shimFn provided. shimFn is called shimFn(originalMethod, [arguments]) originalMethod is bound to 'this' in the context of the function call. i.e. originalMethod can be called directly originalMethod() rather than needing to do originalMethod.call(this)
Example usage:
var a = { isTheBest: function(x) { return x + ' is the best'; } };
shimming.shimOne(a, 'isTheBest', function(originalFn, x) { return originalFn(x) + ' mostly'; });
a.isTheBest('monkey') // returns 'monkey is the best mostly'
Replaces object methods with the wrapper methods provided.
Example usage:
var a = {
status: 'drunk',
isStatus: function(x) { return x + ' is ' + this.status; },
isTheBest: function(x) { return x + ' is the best'; },
isTheWorst: function(x) { return x + ' is the worst'; }
};
var wrapper = function(originalFn, x) { return originalFn(x) + ' mostly'; };
shimming.shim(a, {
isStatus: wrapper,
isTheBest: wrapper,
});
a.isStatus('monkey') // returns 'monkey is drunk mostly'
a.isTheBest('monkey') // returns 'monkey is the best mostly'
a.isTheWorst('monkey') // returns 'monkey is the worst' - it wasn't wrapped
Use npm test
to run the tests. Use npm run cover
to check coverage.
Except there aren't any at present! Anyone want to write some?
See changelog.md
- Try using
obj[methodName] = shimFn.bind(this, originalFn.bind(this))
instead of current way of passing to originalFn
If you discover a bug, please raise an issue on Github. https://github.com/overlookmotel/shimming/issues
Pull requests are very welcome. Please:
- ensure all tests pass before submitting PR
- add an entry to changelog
- add tests for new features
- document new functionality/API additions in README