auto-plex
v0.1.1
Published
Generic Multiplexing for Objects in JS
Downloads
4
Readme
auto-plex
Generic Multiplexing for Objects in JS ( with some expected indirection inefficiencies )
Installation
npm install auto-plex
Usage
An Explicit Events Example:
// given:
// myEmitter (an instance of the Emitter interface)
// an object anObject, which has an Emitter at .someEmitter
// an object anotherObject, which has an Emitter at .someEmitter
// an object aThirdObject, which has an Emitter at .someEmitter
var multi = new Plex({
bubbleup : [
['someEmitter', [ //the member name
'my-event', //the event name
]]
],
emitter : myEmitter
});
multi.plex(anObject);
multi.plex(anotherObject);
multi.plex(aThirdObject);
myEmitter.on('my-event', function(event){
});
anObject.someEmitter.emit('my-event', {something:'consistent'});
anotherObject.someEmitter.emit('my-event', {something:'consistent'});
aThirdObject.someEmitter.emit('my-event', {something:'consistent'});
//'my-event' is now triggered on myEmitter
An Asynchronous Callback Functions Example:
// given:
// a Function .someMember which takes some args and a callback function
// an object anObject, which has a Function .someMember
// an object anotherObject, which has a Function .someMember
// an object aThirdObject, which has a Function .someMember
var multi = new Plex();
multi.plex(anObject);
multi.plex(anotherObject);
multi.plex(aThirdObject);
multi.someMember(arg1, ... argN, function([anReturn, anotherReturn, aThirdReturn]){
});
A Synchronous Returns Example:
// given:
// a Function .someMember which takes some args and returns a value
// an object anObject, which has a Function .someMember
// an object anotherObject, which has a Function .someMember
// an object aThirdObject, which has a Function .someMember
var multi = new Plex();
multi.plex(anObject);
multi.plex(anotherObject);
multi.plex(aThirdObject);
var results = multi.someMember(arg1, ... argN);
// results[0] contains anObject return;
// results[1] contains anotherObject return;
// results[2] contains aThirdObject return;
A Promises Example:
// given:
// a Function .someMember which takes some args and returns a promise
// an object anObject, which has a Function .someMember
// an object anotherObject, which has a Function .someMember
// an object aThirdObject, which has a Function .someMember
var multi = new Plex();
multi.plex(anObject);
multi.plex(anotherObject);
multi.plex(aThirdObject);
multi.someMember(arg1, ... argN).then(function(anReturn, anotherReturn, aThirdReturn){
});
Legacy Support
If you're working with an older version of Node that doesn't include proxies, you need to recite the ancient words:
if(!global.Proxy) global.Proxy = require('node-proxy');
Testing
Just run:
npm run test
Roadmap
- [x] Explicit Events
- [x] Asynchronous Callback Functions
- [x] Asynchronous Promise Functions
- [x] Synchronous Functions
- [ ] Generic Events (danger!)
- [ ] Arg transpose (make args stack with the same sig as FN)