Monologue Integration With postal

by ifandelse

HTML

<script src="http://underscorejs.org/underscore-min.js"></script>
<script src="https://raw.github.com/ifandelse/postal.js/master/lib/browser/postal.js"></script>
<script src="https://raw.github.com/ifandelse/monologue.js/master/lib/browser/monologue.js"></script>

JavaScript

(function(postal, Monologue, _){
    
    Monologue.prototype.goPostal = function(channel, topic) {
        var pubs;
        var _channel = channel || postal.configuration.DEFAULT_CHANNEL;
        var _topic = topic || "#";        
        var bridge = this.__postal__ = {};
        if(Object.prototype.toString.call(channel) === "[object String]" || arguments.length === 0) {
            pubs = [{ channel: _channel, topic: _topic }];
        } else if (typeof channel === "object") {
            pubs = _.reduce(channel, function(memo, channel, topic) {
                memo.push({ channel: channel, topic: topic });
            }, []);    
        }                
        _.each(pubs, function(item) {
            bridge[item.topic] = this.on(item.topic, function(d, e) {
                var envelope = _.extend({}, e, { channel: item.channel } );
                postal.publish(envelope);
            });
        }, this);
    };
    
}(postal, Monologue, _));

postal.addWireTap(function(d, e){
    $('body').append("<div><pre>" + JSON.stringify(e, null, 4) + "</pre></div>");
});

var Worker = function(name) {
    this.name = name;
};
Worker.prototype.doWork = function() {
    this.emit("work.done", { who: this.name });
};
Monologue.makeEmitter(Worker);

var instanceA = new Worker(); 
instanceA.goPostal("OnTheBusNowFolks");
instanceA.doWork();

var instanceB = new Worker(); 
instanceB.goPostal();
instanceB.doWork();

var instanceC = new Worker(); 
instanceC.goPostal("HiFromChannelC");
instanceC.doWork();