mirror of
https://github.com/Hopiu/postal.js.git
synced 2026-05-28 08:08:17 +00:00
Added envelope argument to publish methods, updated diags to use it correctly.
This commit is contained in:
parent
f145105282
commit
13d6c7c419
15 changed files with 177 additions and 81 deletions
|
|
@ -1,11 +1,18 @@
|
|||
postal.addWireTap(function(data) {
|
||||
postal.addWireTap(function(data, envelope) {
|
||||
var all = _.extend(envelope, { data: data });
|
||||
if(!JSON) {
|
||||
throw "This browser or environment does provide JSON support";
|
||||
}
|
||||
try {
|
||||
console.log(JSON.stringify(data));
|
||||
console.log(JSON.stringify(all));
|
||||
}
|
||||
catch(exception) {
|
||||
console.log("Unable to parse data to JSON: " + exception);
|
||||
try {
|
||||
all.data = exception;
|
||||
console.log(JSON.stringify(all));
|
||||
}
|
||||
catch(ex) {
|
||||
console.log("Unable to parse data to JSON: " + exception);
|
||||
}
|
||||
}
|
||||
});
|
||||
Binary file not shown.
2
lib/browser/postal.diagnostics.min.js
vendored
2
lib/browser/postal.diagnostics.min.js
vendored
|
|
@ -1 +1 @@
|
|||
postal.addWireTap(function(a){if(!JSON)throw"This browser or environment does provide JSON support";try{console.log(JSON.stringify(a))}catch(b){console.log("Unable to parse data to JSON: "+b)}})
|
||||
postal.addWireTap(function(a,b){var c=_.extend(b,{data:a});if(!JSON)throw"This browser or environment does provide JSON support";try{console.log(JSON.stringify(c))}catch(d){try{c.data=d,console.log(JSON.stringify(c))}catch(e){console.log("Unable to parse data to JSON: "+d)}}})
|
||||
|
|
@ -3,13 +3,45 @@
|
|||
postal.js
|
||||
Author: Jim Cowart
|
||||
License: Dual licensed MIT (http://www.opensource.org/licenses/mit-license) & GPL (http://www.opensource.org/licenses/gpl-license)
|
||||
Version 0.3.0
|
||||
Version 0.4.0
|
||||
*/
|
||||
|
||||
var DEFAULT_EXCHANGE = "/",
|
||||
DEFAULT_PRIORITY = 50,
|
||||
DEFAULT_DISPOSEAFTER = 0,
|
||||
NO_OP = function() { };
|
||||
NO_OP = function() { },
|
||||
parsePublishArgs = function(args) {
|
||||
var parsed = { envelope: { } }, env;
|
||||
switch(args.length) {
|
||||
case 3:
|
||||
if(typeof args[1] === "Object" && typeof args[2] === "Object") {
|
||||
parsed.envelope.exchange = DEFAULT_EXCHANGE;
|
||||
parsed.envelope.topic = args[0];
|
||||
parsed.payload = args[1];
|
||||
env = parsed.envelope;
|
||||
parsed.envelope = _.extend(env, args[2]);
|
||||
}
|
||||
else {
|
||||
parsed.envelope.exchange = args[0];
|
||||
parsed.envelope.topic = args[1];
|
||||
parsed.payload = args[2];
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
parsed.envelope.exchange = args[0];
|
||||
parsed.envelope.topic = args[1];
|
||||
parsed.payload = args[2];
|
||||
env = parsed.envelope;
|
||||
parsed.envelope = _.extend(env, args[3]);
|
||||
break;
|
||||
default:
|
||||
parsed.envelope.exchange = DEFAULT_EXCHANGE;
|
||||
parsed.envelope.topic = args[0];
|
||||
parsed.payload = args[1];
|
||||
break;
|
||||
}
|
||||
return parsed;
|
||||
};
|
||||
|
||||
var DistinctPredicate = function() {
|
||||
var previous;
|
||||
|
|
@ -39,13 +71,13 @@ ChannelDefinition.prototype = {
|
|||
return subscription;
|
||||
},
|
||||
|
||||
publish: function(data) {
|
||||
postal.configuration.bus.publish({
|
||||
publish: function(data, envelope) {
|
||||
var env = _.extend({
|
||||
exchange: this.exchange,
|
||||
topic: this.topic,
|
||||
data: data,
|
||||
timeStamp: new Date()
|
||||
});
|
||||
timeStamp: new Date(),
|
||||
topic: this.topic
|
||||
}, envelope);
|
||||
postal.configuration.bus.publish(data, env);
|
||||
}
|
||||
};
|
||||
|
||||
|
|
@ -193,22 +225,17 @@ var localBus = {
|
|||
|
||||
wireTaps: [],
|
||||
|
||||
publish: function(envelope) {
|
||||
publish: function(data, envelope) {
|
||||
_.each(this.wireTaps,function(tap) {
|
||||
tap({
|
||||
exchange: envelope.exchange,
|
||||
topic: envelope.topic,
|
||||
data: envelope.data,
|
||||
timeStamp: envelope.timeStamp
|
||||
});
|
||||
tap(data, envelope);
|
||||
});
|
||||
|
||||
_.each(this.subscriptions[envelope.exchange], function(topic) {
|
||||
_.each(topic, function(binding){
|
||||
if(postal.configuration.resolver.compare(binding.topic, envelope.topic)) {
|
||||
if(_.all(binding.constraints, function(constraint) { return constraint(envelope.data); })) {
|
||||
if(_.all(binding.constraints, function(constraint) { return constraint(data); })) {
|
||||
if(typeof binding.callback === 'function') {
|
||||
binding.callback.apply(binding.context, [envelope.data]);
|
||||
binding.callback.apply(binding.context, [data, envelope]);
|
||||
binding.onHandled();
|
||||
}
|
||||
}
|
||||
|
|
@ -288,12 +315,10 @@ var postal = {
|
|||
return channel.subscribe(callbk);
|
||||
},
|
||||
|
||||
publish: function(exchange, topic, payload) {
|
||||
var exch = arguments.length === 3 ? exchange : DEFAULT_EXCHANGE,
|
||||
tpc = arguments.length === 3 ? topic : exchange,
|
||||
msg = arguments.length === 3 ? payload : topic;
|
||||
var channel = this.channel(exch, tpc);
|
||||
channel.publish(msg);
|
||||
publish: function(exchange, topic, payload, envelopeOptions) {
|
||||
var parsedArgs = parsePublishArgs([].slice.call(arguments,0));
|
||||
var channel = this.channel(parsedArgs.envelope.exchange, parsedArgs.envelope.topic);
|
||||
channel.publish(parsedArgs.payload, parsedArgs.envelope);
|
||||
},
|
||||
|
||||
addWireTap: function(callback) {
|
||||
|
|
|
|||
Binary file not shown.
2
lib/browser/postal.min.js
vendored
2
lib/browser/postal.min.js
vendored
|
|
@ -1 +1 @@
|
|||
(function(a,b){var c="/",d=50,e=0,f=function(){},g=function(){var a;return function(b){var c=!1;return _.isString(b)?(c=b===a,a=b):(c=_.isEqual(b,a),a=_.clone(b)),!c}},h=function(a,b){this.exchange=a,this.topic=b};h.prototype={subscribe:function(a){var b=new i(this.exchange,this.topic,a);return l.configuration.bus.subscribe(b),b},publish:function(a){l.configuration.bus.publish({exchange:this.exchange,topic:this.topic,data:a,timeStamp:new Date})}};var i=function(a,b,c){this.exchange=a,this.topic=b,this.callback=c,this.priority=d,this.constraints=[],this.maxCalls=e,this.onHandled=f,this.context=null};i.prototype={unsubscribe:function(){l.configuration.bus.unsubscribe(this)},defer:function(){var a=this.callback;return this.callback=function(b){setTimeout(a,0,b)},this},disposeAfter:function(a){if(_.isNaN(a)||a<=0)throw"The value provided to disposeAfter (maxCalls) must be a number greater than zero.";var b=this.onHandled,c=_.after(a,_.bind(function(){this.unsubscribe(this)},this));return this.onHandled=function(){b.apply(this.context,arguments),c()},this},ignoreDuplicates:function(){return this.withConstraint(new g),this},whenHandledThenExecute:function(a){if(!_.isFunction(a))throw"Value provided to 'whenHandledThenExecute' must be a function";return this.onHandled=a,this},withConstraint:function(a){if(!_.isFunction(a))throw"Predicate constraint must be a function";return this.constraints.push(a),this},withConstraints:function(a){var b=this;return _.isArray(a)&&_.each(a,function(a){b.withConstraint(a)}),b},withContext:function(a){return this.context=a,this},withDebounce:function(a){if(_.isNaN(a))throw"Milliseconds must be a number";var b=this.callback;return this.callback=_.debounce(b,a),this},withDelay:function(a){if(_.isNaN(a))throw"Milliseconds must be a number";var b=this.callback;return this.callback=function(c){setTimeout(b,a,c)},this},withPriority:function(a){if(_.isNaN(a))throw"Priority must be a number";return this.priority=a,this},withThrottle:function(a){if(_.isNaN(a))throw"Milliseconds must be a number";var b=this.callback;return this.callback=_.throttle(b,a),this}};var j={cache:{},compare:function(a,b){if(this.cache[b]&&this.cache[b][a])return!0;var c=new RegExp("^"+this.regexify(a)+"$"),d=c.test(b);return d&&(this.cache[b]||(this.cache[b]={}),this.cache[b][a]=!0),d},regexify:function(a){return a.replace(/\./g,"\\.").replace(/\*/g,".*").replace(/#/g,"[A-Z,a-z,0-9]*")}},k={subscriptions:{},wireTaps:[],publish:function(a){_.each(this.wireTaps,function(b){b({exchange:a.exchange,topic:a.topic,data:a.data,timeStamp:a.timeStamp})}),_.each(this.subscriptions[a.exchange],function(b){_.each(b,function(b){l.configuration.resolver.compare(b.topic,a.topic)&&_.all(b.constraints,function(b){return b(a.data)})&&typeof b.callback=="function"&&(b.callback.apply(b.context,[a.data]),b.onHandled())})})},subscribe:function(a){var b,c,d;this.subscriptions[a.exchange]||(this.subscriptions[a.exchange]={}),this.subscriptions[a.exchange][a.topic]||(this.subscriptions[a.exchange][a.topic]=[]),b=this.subscriptions[a.exchange][a.topic].length-1;if(!_.any(this.subscriptions[a.exchange][a.topic],function(b){return b===a})){for(;b>=0;b--)if(this.subscriptions[a.exchange][a.topic][b].priority<=a.priority){this.subscriptions[a.exchange][a.topic].splice(b+1,0,a),c=!0;break}c||this.subscriptions[a.exchange][a.topic].unshift(a)}return _.bind(function(){this.unsubscribe(a)},this)},unsubscribe:function(a){if(this.subscriptions[a.exchange][a.topic]){var b=this.subscriptions[a.exchange][a.topic].length,c=0;for(;c<b;c++)if(this.subscriptions[a.exchange][a.topic][c]===a){this.subscriptions[a.exchange][a.topic].splice(c,1);break}}},addWireTap:function(a){return this.wireTaps.push(a),function(){var b=this.wireTaps.indexOf(a);b!==-1&&this.wireTaps.splice(b,1)}}},l={configuration:{bus:k,resolver:j},channel:function(a,b){var d=arguments.length===2?a:c,e=arguments.length===2?b:a;return new h(d,e)},subscribe:function(a,b,d){var e=arguments.length===3?a:c,f=arguments.length===3?b:a,g=arguments.length===3?d:b,h=this.channel(e,f);return h.subscribe(g)},publish:function(a,b,d){var e=arguments.length===3?a:c,f=arguments.length===3?b:a,g=arguments.length===3?d:b,h=this.channel(e,f);h.publish(g)},addWireTap:function(a){this.configuration.bus.addWireTap(a)}};a.postal=l})(window)
|
||||
(function(a,b){var c="/",d=50,e=0,f=function(){},g=function(a){var b={envelope:{}},d;switch(a.length){case 3:typeof a[1]=="Object"&&typeof a[2]=="Object"?(b.envelope.exchange=c,b.envelope.topic=a[0],b.payload=a[1],d=b.envelope,b.envelope=_.extend(d,a[2])):(b.envelope.exchange=a[0],b.envelope.topic=a[1],b.payload=a[2]);break;case 4:b.envelope.exchange=a[0],b.envelope.topic=a[1],b.payload=a[2],d=b.envelope,b.envelope=_.extend(d,a[3]);break;default:b.envelope.exchange=c,b.envelope.topic=a[0],b.payload=a[1]}return b},h=function(){var a;return function(b){var c=!1;return _.isString(b)?(c=b===a,a=b):(c=_.isEqual(b,a),a=_.clone(b)),!c}},i=function(a,b){this.exchange=a,this.topic=b};i.prototype={subscribe:function(a){var b=new j(this.exchange,this.topic,a);return m.configuration.bus.subscribe(b),b},publish:function(a,b){var c=_.extend({exchange:this.exchange,timeStamp:new Date,topic:this.topic},b);m.configuration.bus.publish(a,c)}};var j=function(a,b,c){this.exchange=a,this.topic=b,this.callback=c,this.priority=d,this.constraints=[],this.maxCalls=e,this.onHandled=f,this.context=null};j.prototype={unsubscribe:function(){m.configuration.bus.unsubscribe(this)},defer:function(){var a=this.callback;return this.callback=function(b){setTimeout(a,0,b)},this},disposeAfter:function(a){if(_.isNaN(a)||a<=0)throw"The value provided to disposeAfter (maxCalls) must be a number greater than zero.";var b=this.onHandled,c=_.after(a,_.bind(function(){this.unsubscribe(this)},this));return this.onHandled=function(){b.apply(this.context,arguments),c()},this},ignoreDuplicates:function(){return this.withConstraint(new h),this},whenHandledThenExecute:function(a){if(!_.isFunction(a))throw"Value provided to 'whenHandledThenExecute' must be a function";return this.onHandled=a,this},withConstraint:function(a){if(!_.isFunction(a))throw"Predicate constraint must be a function";return this.constraints.push(a),this},withConstraints:function(a){var b=this;return _.isArray(a)&&_.each(a,function(a){b.withConstraint(a)}),b},withContext:function(a){return this.context=a,this},withDebounce:function(a){if(_.isNaN(a))throw"Milliseconds must be a number";var b=this.callback;return this.callback=_.debounce(b,a),this},withDelay:function(a){if(_.isNaN(a))throw"Milliseconds must be a number";var b=this.callback;return this.callback=function(c){setTimeout(b,a,c)},this},withPriority:function(a){if(_.isNaN(a))throw"Priority must be a number";return this.priority=a,this},withThrottle:function(a){if(_.isNaN(a))throw"Milliseconds must be a number";var b=this.callback;return this.callback=_.throttle(b,a),this}};var k={cache:{},compare:function(a,b){if(this.cache[b]&&this.cache[b][a])return!0;var c=new RegExp("^"+this.regexify(a)+"$"),d=c.test(b);return d&&(this.cache[b]||(this.cache[b]={}),this.cache[b][a]=!0),d},regexify:function(a){return a.replace(/\./g,"\\.").replace(/\*/g,".*").replace(/#/g,"[A-Z,a-z,0-9]*")}},l={subscriptions:{},wireTaps:[],publish:function(a,b){_.each(this.wireTaps,function(c){c(a,b)}),_.each(this.subscriptions[b.exchange],function(c){_.each(c,function(c){m.configuration.resolver.compare(c.topic,b.topic)&&_.all(c.constraints,function(b){return b(a)})&&typeof c.callback=="function"&&(c.callback.apply(c.context,[a,b]),c.onHandled())})})},subscribe:function(a){var b,c,d;this.subscriptions[a.exchange]||(this.subscriptions[a.exchange]={}),this.subscriptions[a.exchange][a.topic]||(this.subscriptions[a.exchange][a.topic]=[]),b=this.subscriptions[a.exchange][a.topic].length-1;if(!_.any(this.subscriptions[a.exchange][a.topic],function(b){return b===a})){for(;b>=0;b--)if(this.subscriptions[a.exchange][a.topic][b].priority<=a.priority){this.subscriptions[a.exchange][a.topic].splice(b+1,0,a),c=!0;break}c||this.subscriptions[a.exchange][a.topic].unshift(a)}return _.bind(function(){this.unsubscribe(a)},this)},unsubscribe:function(a){if(this.subscriptions[a.exchange][a.topic]){var b=this.subscriptions[a.exchange][a.topic].length,c=0;for(;c<b;c++)if(this.subscriptions[a.exchange][a.topic][c]===a){this.subscriptions[a.exchange][a.topic].splice(c,1);break}}},addWireTap:function(a){return this.wireTaps.push(a),function(){var b=this.wireTaps.indexOf(a);b!==-1&&this.wireTaps.splice(b,1)}}},m={configuration:{bus:l,resolver:k},channel:function(a,b){var d=arguments.length===2?a:c,e=arguments.length===2?b:a;return new i(d,e)},subscribe:function(a,b,d){var e=arguments.length===3?a:c,f=arguments.length===3?b:a,g=arguments.length===3?d:b,h=this.channel(e,f);return h.subscribe(g)},publish:function(a,b,c,d){var e=g([].slice.call(arguments,0)),f=this.channel(e.envelope.exchange,e.envelope.topic);f.publish(e.payload,e.envelope)},addWireTap:function(a){this.configuration.bus.addWireTap(a)}};a.postal=m})(window)
|
||||
|
|
@ -1,13 +1,20 @@
|
|||
module.exports = function(postal) {
|
||||
postal.addWireTap(function(data) {
|
||||
postal.addWireTap(function(data, envelope) {
|
||||
var all = _.extend(envelope, { data: data });
|
||||
if(!JSON) {
|
||||
throw "This browser or environment does provide JSON support";
|
||||
}
|
||||
try {
|
||||
console.log(JSON.stringify(data));
|
||||
console.log(JSON.stringify(all));
|
||||
}
|
||||
catch(exception) {
|
||||
console.log("Unable to parse data to JSON: " + exception);
|
||||
try {
|
||||
all.data = exception;
|
||||
console.log(JSON.stringify(all));
|
||||
}
|
||||
catch(ex) {
|
||||
console.log("Unable to parse data to JSON: " + exception);
|
||||
}
|
||||
}
|
||||
});
|
||||
};
|
||||
|
|
@ -3,13 +3,45 @@ var _ = require('underscore');
|
|||
postal.js
|
||||
Author: Jim Cowart
|
||||
License: Dual licensed MIT (http://www.opensource.org/licenses/mit-license) & GPL (http://www.opensource.org/licenses/gpl-license)
|
||||
Version 0.3.0
|
||||
Version 0.4.0
|
||||
*/
|
||||
|
||||
var DEFAULT_EXCHANGE = "/",
|
||||
DEFAULT_PRIORITY = 50,
|
||||
DEFAULT_DISPOSEAFTER = 0,
|
||||
NO_OP = function() { };
|
||||
NO_OP = function() { },
|
||||
parsePublishArgs = function(args) {
|
||||
var parsed = { envelope: { } }, env;
|
||||
switch(args.length) {
|
||||
case 3:
|
||||
if(typeof args[1] === "Object" && typeof args[2] === "Object") {
|
||||
parsed.envelope.exchange = DEFAULT_EXCHANGE;
|
||||
parsed.envelope.topic = args[0];
|
||||
parsed.payload = args[1];
|
||||
env = parsed.envelope;
|
||||
parsed.envelope = _.extend(env, args[2]);
|
||||
}
|
||||
else {
|
||||
parsed.envelope.exchange = args[0];
|
||||
parsed.envelope.topic = args[1];
|
||||
parsed.payload = args[2];
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
parsed.envelope.exchange = args[0];
|
||||
parsed.envelope.topic = args[1];
|
||||
parsed.payload = args[2];
|
||||
env = parsed.envelope;
|
||||
parsed.envelope = _.extend(env, args[3]);
|
||||
break;
|
||||
default:
|
||||
parsed.envelope.exchange = DEFAULT_EXCHANGE;
|
||||
parsed.envelope.topic = args[0];
|
||||
parsed.payload = args[1];
|
||||
break;
|
||||
}
|
||||
return parsed;
|
||||
};
|
||||
|
||||
var DistinctPredicate = function() {
|
||||
var previous;
|
||||
|
|
@ -39,13 +71,13 @@ ChannelDefinition.prototype = {
|
|||
return subscription;
|
||||
},
|
||||
|
||||
publish: function(data) {
|
||||
postal.configuration.bus.publish({
|
||||
publish: function(data, envelope) {
|
||||
var env = _.extend({
|
||||
exchange: this.exchange,
|
||||
topic: this.topic,
|
||||
data: data,
|
||||
timeStamp: new Date()
|
||||
});
|
||||
timeStamp: new Date(),
|
||||
topic: this.topic
|
||||
}, envelope);
|
||||
postal.configuration.bus.publish(data, env);
|
||||
}
|
||||
};
|
||||
|
||||
|
|
@ -193,22 +225,17 @@ var localBus = {
|
|||
|
||||
wireTaps: [],
|
||||
|
||||
publish: function(envelope) {
|
||||
publish: function(data, envelope) {
|
||||
_.each(this.wireTaps,function(tap) {
|
||||
tap({
|
||||
exchange: envelope.exchange,
|
||||
topic: envelope.topic,
|
||||
data: envelope.data,
|
||||
timeStamp: envelope.timeStamp
|
||||
});
|
||||
tap(data, envelope);
|
||||
});
|
||||
|
||||
_.each(this.subscriptions[envelope.exchange], function(topic) {
|
||||
_.each(topic, function(binding){
|
||||
if(postal.configuration.resolver.compare(binding.topic, envelope.topic)) {
|
||||
if(_.all(binding.constraints, function(constraint) { return constraint(envelope.data); })) {
|
||||
if(_.all(binding.constraints, function(constraint) { return constraint(data); })) {
|
||||
if(typeof binding.callback === 'function') {
|
||||
binding.callback.apply(binding.context, [envelope.data]);
|
||||
binding.callback.apply(binding.context, [data, envelope]);
|
||||
binding.onHandled();
|
||||
}
|
||||
}
|
||||
|
|
@ -288,12 +315,10 @@ var postal = {
|
|||
return channel.subscribe(callbk);
|
||||
},
|
||||
|
||||
publish: function(exchange, topic, payload) {
|
||||
var exch = arguments.length === 3 ? exchange : DEFAULT_EXCHANGE,
|
||||
tpc = arguments.length === 3 ? topic : exchange,
|
||||
msg = arguments.length === 3 ? payload : topic;
|
||||
var channel = this.channel(exch, tpc);
|
||||
channel.publish(msg);
|
||||
publish: function(exchange, topic, payload, envelopeOptions) {
|
||||
var parsedArgs = parsePublishArgs([].slice.call(arguments,0));
|
||||
var channel = this.channel(parsedArgs.envelope.exchange, parsedArgs.envelope.topic);
|
||||
channel.publish(parsedArgs.payload, parsedArgs.envelope);
|
||||
},
|
||||
|
||||
addWireTap: function(callback) {
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
"author": "Jim Cowart <jim@ifandelse.com> (http://ifandelse.com)",
|
||||
"name": "postal",
|
||||
"description": "Pub/Sub library providing wildcard subscriptions, complex message handling, etc. Works server and client-side.",
|
||||
"version": "0.3.2",
|
||||
"version": "0.4.0",
|
||||
"homepage": "http://github.com/ifandelse/postal.js",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
|
|
|
|||
|
|
@ -1,11 +1,18 @@
|
|||
postal.addWireTap(function(data) {
|
||||
postal.addWireTap(function(data, envelope) {
|
||||
var all = _.extend(envelope, { data: data });
|
||||
if(!JSON) {
|
||||
throw "This browser or environment does provide JSON support";
|
||||
}
|
||||
try {
|
||||
console.log(JSON.stringify(data));
|
||||
console.log(JSON.stringify(all));
|
||||
}
|
||||
catch(exception) {
|
||||
console.log("Unable to parse data to JSON: " + exception);
|
||||
try {
|
||||
all.data = exception;
|
||||
console.log(JSON.stringify(all));
|
||||
}
|
||||
catch(ex) {
|
||||
console.log("Unable to parse data to JSON: " + exception);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
@ -18,12 +18,10 @@ var postal = {
|
|||
return channel.subscribe(callbk);
|
||||
},
|
||||
|
||||
publish: function(exchange, topic, payload) {
|
||||
var exch = arguments.length === 3 ? exchange : DEFAULT_EXCHANGE,
|
||||
tpc = arguments.length === 3 ? topic : exchange,
|
||||
msg = arguments.length === 3 ? payload : topic;
|
||||
var channel = this.channel(exch, tpc);
|
||||
channel.publish(msg);
|
||||
publish: function(exchange, topic, payload, envelopeOptions) {
|
||||
var parsedArgs = parsePublishArgs([].slice.call(arguments,0));
|
||||
var channel = this.channel(parsedArgs.envelope.exchange, parsedArgs.envelope.topic);
|
||||
channel.publish(parsedArgs.payload, parsedArgs.envelope);
|
||||
},
|
||||
|
||||
addWireTap: function(callback) {
|
||||
|
|
|
|||
|
|
@ -10,12 +10,12 @@ ChannelDefinition.prototype = {
|
|||
return subscription;
|
||||
},
|
||||
|
||||
publish: function(data) {
|
||||
postal.configuration.bus.publish({
|
||||
publish: function(data, envelope) {
|
||||
var env = _.extend({
|
||||
exchange: this.exchange,
|
||||
topic: this.topic,
|
||||
data: data,
|
||||
timeStamp: new Date()
|
||||
});
|
||||
timeStamp: new Date(),
|
||||
topic: this.topic
|
||||
}, envelope);
|
||||
postal.configuration.bus.publish(data, env);
|
||||
}
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,4 +1,36 @@
|
|||
var DEFAULT_EXCHANGE = "/",
|
||||
DEFAULT_PRIORITY = 50,
|
||||
DEFAULT_DISPOSEAFTER = 0,
|
||||
NO_OP = function() { };
|
||||
NO_OP = function() { },
|
||||
parsePublishArgs = function(args) {
|
||||
var parsed = { envelope: { } }, env;
|
||||
switch(args.length) {
|
||||
case 3:
|
||||
if(typeof args[1] === "Object" && typeof args[2] === "Object") {
|
||||
parsed.envelope.exchange = DEFAULT_EXCHANGE;
|
||||
parsed.envelope.topic = args[0];
|
||||
parsed.payload = args[1];
|
||||
env = parsed.envelope;
|
||||
parsed.envelope = _.extend(env, args[2]);
|
||||
}
|
||||
else {
|
||||
parsed.envelope.exchange = args[0];
|
||||
parsed.envelope.topic = args[1];
|
||||
parsed.payload = args[2];
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
parsed.envelope.exchange = args[0];
|
||||
parsed.envelope.topic = args[1];
|
||||
parsed.payload = args[2];
|
||||
env = parsed.envelope;
|
||||
parsed.envelope = _.extend(env, args[3]);
|
||||
break;
|
||||
default:
|
||||
parsed.envelope.exchange = DEFAULT_EXCHANGE;
|
||||
parsed.envelope.topic = args[0];
|
||||
parsed.payload = args[1];
|
||||
break;
|
||||
}
|
||||
return parsed;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -4,22 +4,17 @@ var localBus = {
|
|||
|
||||
wireTaps: [],
|
||||
|
||||
publish: function(envelope) {
|
||||
publish: function(data, envelope) {
|
||||
_.each(this.wireTaps,function(tap) {
|
||||
tap({
|
||||
exchange: envelope.exchange,
|
||||
topic: envelope.topic,
|
||||
data: envelope.data,
|
||||
timeStamp: envelope.timeStamp
|
||||
});
|
||||
tap(data, envelope);
|
||||
});
|
||||
|
||||
_.each(this.subscriptions[envelope.exchange], function(topic) {
|
||||
_.each(topic, function(binding){
|
||||
if(postal.configuration.resolver.compare(binding.topic, envelope.topic)) {
|
||||
if(_.all(binding.constraints, function(constraint) { return constraint(envelope.data); })) {
|
||||
if(_.all(binding.constraints, function(constraint) { return constraint(data); })) {
|
||||
if(typeof binding.callback === 'function') {
|
||||
binding.callback.apply(binding.context, [envelope.data]);
|
||||
binding.callback.apply(binding.context, [data, envelope]);
|
||||
binding.onHandled();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,5 +2,5 @@
|
|||
postal.js
|
||||
Author: Jim Cowart
|
||||
License: Dual licensed MIT (http://www.opensource.org/licenses/mit-license) & GPL (http://www.opensource.org/licenses/gpl-license)
|
||||
Version 0.3.0
|
||||
Version 0.4.0
|
||||
*/
|
||||
|
|
|
|||
Loading…
Reference in a new issue