mirror of
https://github.com/Hopiu/postal.js.git
synced 2026-03-16 22:20:23 +00:00
Moved linkChannels behavior to add-on
This commit is contained in:
parent
7647d6b21e
commit
cc20b691bb
8 changed files with 54 additions and 79 deletions
|
|
@ -212,31 +212,6 @@
|
|||
}
|
||||
};
|
||||
},
|
||||
linkChannels: function (sources, destinations) {
|
||||
var result = [],
|
||||
self = this;
|
||||
sources = !_.isArray(sources) ? [sources] : sources;
|
||||
destinations = !_.isArray(destinations) ? [destinations] : destinations;
|
||||
_.each(sources, function (source) {
|
||||
var sourceTopic = source.topic || "#";
|
||||
_.each(destinations, function (destination) {
|
||||
var destChannel = destination.channel || self.configuration.DEFAULT_CHANNEL;
|
||||
result.push(
|
||||
self.subscribe({
|
||||
channel: source.channel || self.configuration.DEFAULT_CHANNEL,
|
||||
topic: sourceTopic,
|
||||
callback: function (data, env) {
|
||||
var newEnv = _.clone(env);
|
||||
newEnv.topic = _.isFunction(destination.topic) ? destination.topic(env.topic) : destination.topic || env.topic;
|
||||
newEnv.channel = destChannel;
|
||||
newEnv.data = data;
|
||||
self.publish(newEnv);
|
||||
}
|
||||
}));
|
||||
});
|
||||
});
|
||||
return result;
|
||||
},
|
||||
noConflict: function () {
|
||||
if (typeof window === "undefined") {
|
||||
throw new Error("noConflict can only be used in browser clients which aren't using AMD modules");
|
||||
|
|
|
|||
2
lib/basic/postal.basic.min.js
vendored
2
lib/basic/postal.basic.min.js
vendored
|
|
@ -5,4 +5,4 @@
|
|||
* Url: http://github.com/postaljs/postal.js
|
||||
* License(s): MIT, GPL
|
||||
*/
|
||||
(function(n,t){"object"==typeof module&&module.exports?module.exports=t(require("underscore"),this):"function"==typeof define&&define.amd?define(["underscore"],function(i){return t(i,n)}):n.postal=t(n._,n)})(this,function(n,t){var i,e=t.postal,s=function(n){this.channel=n||i.configuration.DEFAULT_CHANNEL,this.initialize()};s.prototype.initialize=function(){},s.prototype.subscribe=function(){return i.subscribe({channel:this.channel,topic:1===arguments.length?arguments[0].topic:arguments[0],callback:1===arguments.length?arguments[0].callback:arguments[1]})},s.prototype.publish=function(){var n=1===arguments.length?"[object String]"===Object.prototype.toString.call(arguments[0])?{topic:arguments[0]}:arguments[0]:{topic:arguments[0],data:arguments[1]};n.channel=this.channel,i.publish(n)};var c=function(n,t,i){if(3!==arguments.length)throw new Error("You must provide a channel, topic and callback when creating a SubscriptionDefinition instance.");if(0===t.length)throw new Error("Topics cannot be empty");this.channel=n,this.topic=t,this.subscribe(i)};c.prototype={unsubscribe:function(){this.inactive||(this.inactive=!0,i.unsubscribe(this))},subscribe:function(n){return this.callback=n,this},withContext:function(n){return this.context=n,this}};var o={cache:{},regex:{},compare:function(t,i){var e,s,c,o=this.cache[i]&&this.cache[i][t];return"undefined"!=typeof o?o:((s=this.regex[t])||(e="^"+n.map(t.split("."),function(n){var t="";return c&&(t="#"!==c?"\\.\\b":"\\b"),t+="#"===n?"[\\s\\S]*":"*"===n?"[^.]+":n,c=n,t}).join("")+"$",s=this.regex[t]=new RegExp(e)),this.cache[i]=this.cache[i]||{},this.cache[i][t]=o=s.test(i),o)},reset:function(){this.cache={},this.regex={}}},r=function(n,t){!n.inactive&&i.configuration.resolver.compare(n.topic,t.topic)&&n.callback.call(n.context||this,t.data,t)},a=0,u=[],h=function(){for(;u.length;)i.unsubscribe(u.shift())};if(i={configuration:{resolver:o,DEFAULT_CHANNEL:"/",SYSTEM_CHANNEL:"postal"},subscriptions:{},wireTaps:[],ChannelDefinition:s,SubscriptionDefinition:c,channel:function(n){return new s(n)},subscribe:function(n){var t,i=new c(n.channel||this.configuration.DEFAULT_CHANNEL,n.topic,n.callback),e=this.subscriptions[i.channel];return this.publish({channel:this.configuration.SYSTEM_CHANNEL,topic:"subscription.created",data:{event:"subscription.created",channel:i.channel,topic:i.topic}}),e||(e=this.subscriptions[i.channel]={}),t=this.subscriptions[i.channel][i.topic],t||(t=this.subscriptions[i.channel][i.topic]=[]),t.push(i),i},publish:function(t){++a,t.channel=t.channel||this.configuration.DEFAULT_CHANNEL,t.timeStamp=new Date,n.each(this.wireTaps,function(n){n(t.data,t)}),this.subscriptions[t.channel]&&n.each(this.subscriptions[t.channel],function(n){for(var i,e=0,s=n.length;s>e;)(i=n[e++])&&r(i,t)}),0===--a&&h()},unsubscribe:function(n){if(a)return void u.push(n);if(this.subscriptions[n.channel]&&this.subscriptions[n.channel][n.topic])for(var t=this.subscriptions[n.channel][n.topic].length,i=0;t>i;){if(this.subscriptions[n.channel][n.topic][i]===n){this.subscriptions[n.channel][n.topic].splice(i,1);break}i+=1}this.publish({channel:this.configuration.SYSTEM_CHANNEL,topic:"subscription.removed",data:{event:"subscription.removed",channel:n.channel,topic:n.topic}})},addWireTap:function(n){var t=this;return t.wireTaps.push(n),function(){var i=t.wireTaps.indexOf(n);-1!==i&&t.wireTaps.splice(i,1)}},linkChannels:function(t,i){var e=[],s=this;return t=n.isArray(t)?t:[t],i=n.isArray(i)?i:[i],n.each(t,function(t){var c=t.topic||"#";n.each(i,function(i){var o=i.channel||s.configuration.DEFAULT_CHANNEL;e.push(s.subscribe({channel:t.channel||s.configuration.DEFAULT_CHANNEL,topic:c,callback:function(t,e){var c=n.clone(e);c.topic=n.isFunction(i.topic)?i.topic(e.topic):i.topic||e.topic,c.channel=o,c.data=t,s.publish(c)}}))})}),e},noConflict:function(){if("undefined"==typeof window)throw new Error("noConflict can only be used in browser clients which aren't using AMD modules");return t.postal=e,this},getSubscribersFor:function(){var n=arguments[0],t=arguments[1];return 1===arguments.length&&(n=arguments[0].channel||this.configuration.DEFAULT_CHANNEL,t=arguments[0].topic),this.subscriptions[n]&&Object.prototype.hasOwnProperty.call(this.subscriptions[n],t)?this.subscriptions[n][t]:[]},reset:function(){this.subscriptions&&(n.each(this.subscriptions,function(t){n.each(t,function(n){for(;n.length;)n.pop().unsubscribe()})}),this.subscriptions={}),this.configuration.resolver.reset()}},i.subscriptions[i.configuration.SYSTEM_CHANNEL]={},t&&Object.prototype.hasOwnProperty.call(t,"__postalReady__")&&n.isArray(t.__postalReady__))for(;t.__postalReady__.length;)t.__postalReady__.shift().onReady(i);return i});
|
||||
(function(n,t){"object"==typeof module&&module.exports?module.exports=t(require("underscore"),this):"function"==typeof define&&define.amd?define(["underscore"],function(i){return t(i,n)}):n.postal=t(n._,n)})(this,function(n,t){var i,e=t.postal,s=function(n){this.channel=n||i.configuration.DEFAULT_CHANNEL,this.initialize()};s.prototype.initialize=function(){},s.prototype.subscribe=function(){return i.subscribe({channel:this.channel,topic:1===arguments.length?arguments[0].topic:arguments[0],callback:1===arguments.length?arguments[0].callback:arguments[1]})},s.prototype.publish=function(){var n=1===arguments.length?"[object String]"===Object.prototype.toString.call(arguments[0])?{topic:arguments[0]}:arguments[0]:{topic:arguments[0],data:arguments[1]};n.channel=this.channel,i.publish(n)};var c=function(n,t,i){if(3!==arguments.length)throw new Error("You must provide a channel, topic and callback when creating a SubscriptionDefinition instance.");if(0===t.length)throw new Error("Topics cannot be empty");this.channel=n,this.topic=t,this.subscribe(i)};c.prototype={unsubscribe:function(){this.inactive||(this.inactive=!0,i.unsubscribe(this))},subscribe:function(n){return this.callback=n,this},withContext:function(n){return this.context=n,this}};var o={cache:{},regex:{},compare:function(t,i){var e,s,c,o=this.cache[i]&&this.cache[i][t];return"undefined"!=typeof o?o:((s=this.regex[t])||(e="^"+n.map(t.split("."),function(n){var t="";return c&&(t="#"!==c?"\\.\\b":"\\b"),t+="#"===n?"[\\s\\S]*":"*"===n?"[^.]+":n,c=n,t}).join("")+"$",s=this.regex[t]=new RegExp(e)),this.cache[i]=this.cache[i]||{},this.cache[i][t]=o=s.test(i),o)},reset:function(){this.cache={},this.regex={}}},r=function(n,t){!n.inactive&&i.configuration.resolver.compare(n.topic,t.topic)&&n.callback.call(n.context||this,t.data,t)},a=0,u=[],h=function(){for(;u.length;)i.unsubscribe(u.shift())};if(i={configuration:{resolver:o,DEFAULT_CHANNEL:"/",SYSTEM_CHANNEL:"postal"},subscriptions:{},wireTaps:[],ChannelDefinition:s,SubscriptionDefinition:c,channel:function(n){return new s(n)},subscribe:function(n){var t,i=new c(n.channel||this.configuration.DEFAULT_CHANNEL,n.topic,n.callback),e=this.subscriptions[i.channel];return this.publish({channel:this.configuration.SYSTEM_CHANNEL,topic:"subscription.created",data:{event:"subscription.created",channel:i.channel,topic:i.topic}}),e||(e=this.subscriptions[i.channel]={}),t=this.subscriptions[i.channel][i.topic],t||(t=this.subscriptions[i.channel][i.topic]=[]),t.push(i),i},publish:function(t){++a,t.channel=t.channel||this.configuration.DEFAULT_CHANNEL,t.timeStamp=new Date,n.each(this.wireTaps,function(n){n(t.data,t)}),this.subscriptions[t.channel]&&n.each(this.subscriptions[t.channel],function(n){for(var i,e=0,s=n.length;s>e;)(i=n[e++])&&r(i,t)}),0===--a&&h()},unsubscribe:function(n){if(a)return void u.push(n);if(this.subscriptions[n.channel]&&this.subscriptions[n.channel][n.topic])for(var t=this.subscriptions[n.channel][n.topic].length,i=0;t>i;){if(this.subscriptions[n.channel][n.topic][i]===n){this.subscriptions[n.channel][n.topic].splice(i,1);break}i+=1}this.publish({channel:this.configuration.SYSTEM_CHANNEL,topic:"subscription.removed",data:{event:"subscription.removed",channel:n.channel,topic:n.topic}})},addWireTap:function(n){var t=this;return t.wireTaps.push(n),function(){var i=t.wireTaps.indexOf(n);-1!==i&&t.wireTaps.splice(i,1)}},noConflict:function(){if("undefined"==typeof window)throw new Error("noConflict can only be used in browser clients which aren't using AMD modules");return t.postal=e,this},getSubscribersFor:function(){var n=arguments[0],t=arguments[1];return 1===arguments.length&&(n=arguments[0].channel||this.configuration.DEFAULT_CHANNEL,t=arguments[0].topic),this.subscriptions[n]&&Object.prototype.hasOwnProperty.call(this.subscriptions[n],t)?this.subscriptions[n][t]:[]},reset:function(){this.subscriptions&&(n.each(this.subscriptions,function(t){n.each(t,function(n){for(;n.length;)n.pop().unsubscribe()})}),this.subscriptions={}),this.configuration.resolver.reset()}},i.subscriptions[i.configuration.SYSTEM_CHANNEL]={},t&&Object.prototype.hasOwnProperty.call(t,"__postalReady__")&&n.isArray(t.__postalReady__))for(;t.__postalReady__.length;)t.__postalReady__.shift().onReady(i);return i});
|
||||
|
|
@ -454,31 +454,6 @@
|
|||
}
|
||||
};
|
||||
},
|
||||
linkChannels: function (sources, destinations) {
|
||||
var result = [],
|
||||
self = this;
|
||||
sources = !_.isArray(sources) ? [sources] : sources;
|
||||
destinations = !_.isArray(destinations) ? [destinations] : destinations;
|
||||
_.each(sources, function (source) {
|
||||
var sourceTopic = source.topic || "#";
|
||||
_.each(destinations, function (destination) {
|
||||
var destChannel = destination.channel || self.configuration.DEFAULT_CHANNEL;
|
||||
result.push(
|
||||
self.subscribe({
|
||||
channel: source.channel || self.configuration.DEFAULT_CHANNEL,
|
||||
topic: sourceTopic,
|
||||
callback: function (data, env) {
|
||||
var newEnv = _.clone(env);
|
||||
newEnv.topic = _.isFunction(destination.topic) ? destination.topic(env.topic) : destination.topic || env.topic;
|
||||
newEnv.channel = destChannel;
|
||||
newEnv.data = data;
|
||||
self.publish(newEnv);
|
||||
}
|
||||
}));
|
||||
});
|
||||
});
|
||||
return result;
|
||||
},
|
||||
noConflict: function () {
|
||||
if (typeof window === "undefined") {
|
||||
throw new Error("noConflict can only be used in browser clients which aren't using AMD modules");
|
||||
|
|
@ -513,6 +488,31 @@
|
|||
}
|
||||
};
|
||||
_postal.subscriptions[_postal.configuration.SYSTEM_CHANNEL] = {};
|
||||
_postal.linkChannels = function (sources, destinations) {
|
||||
var result = [],
|
||||
self = this;
|
||||
sources = !_.isArray(sources) ? [sources] : sources;
|
||||
destinations = !_.isArray(destinations) ? [destinations] : destinations;
|
||||
_.each(sources, function (source) {
|
||||
var sourceTopic = source.topic || "#";
|
||||
_.each(destinations, function (destination) {
|
||||
var destChannel = destination.channel || self.configuration.DEFAULT_CHANNEL;
|
||||
result.push(
|
||||
self.subscribe({
|
||||
channel: source.channel || self.configuration.DEFAULT_CHANNEL,
|
||||
topic: sourceTopic,
|
||||
callback: function (data, env) {
|
||||
var newEnv = _.clone(env);
|
||||
newEnv.topic = _.isFunction(destination.topic) ? destination.topic(env.topic) : destination.topic || env.topic;
|
||||
newEnv.channel = destChannel;
|
||||
newEnv.data = data;
|
||||
self.publish(newEnv);
|
||||
}
|
||||
}));
|
||||
});
|
||||
});
|
||||
return result;
|
||||
};
|
||||
if (global && Object.prototype.hasOwnProperty.call(global, "__postalReady__") && _.isArray(global.__postalReady__)) {
|
||||
while (global.__postalReady__.length) {
|
||||
global.__postalReady__.shift().onReady(_postal);
|
||||
|
|
|
|||
2
lib/postal.min.js
vendored
2
lib/postal.min.js
vendored
File diff suppressed because one or more lines are too long
|
|
@ -20,7 +20,6 @@
|
|||
<script type="text/javascript" src="../lib/postal.js"></script>
|
||||
<script type="text/javascript" src="postaljs.spec.js"></script>
|
||||
<script type="text/javascript" src="utils.spec.js"></script>
|
||||
<script type="text/javascript" src="linkedChannels.spec.js"></script>
|
||||
<script type="text/javascript" src="bindingsResolver.spec.js"></script>
|
||||
<script type="text/javascript" src="channelDefinition.spec.js"></script>
|
||||
<script type="text/javascript" src="subscriptionDefinition.spec.js"></script>
|
||||
|
|
|
|||
26
src/Api.js
26
src/Api.js
|
|
@ -112,32 +112,6 @@ _postal = {
|
|||
};
|
||||
},
|
||||
|
||||
linkChannels : function ( sources, destinations ) {
|
||||
var result = [], self = this;
|
||||
sources = !_.isArray( sources ) ? [ sources ] : sources;
|
||||
destinations = !_.isArray( destinations ) ? [destinations] : destinations;
|
||||
_.each( sources, function ( source ) {
|
||||
var sourceTopic = source.topic || "#";
|
||||
_.each( destinations, function ( destination ) {
|
||||
var destChannel = destination.channel || self.configuration.DEFAULT_CHANNEL;
|
||||
result.push(
|
||||
self.subscribe( {
|
||||
channel : source.channel || self.configuration.DEFAULT_CHANNEL,
|
||||
topic : sourceTopic,
|
||||
callback : function ( data, env ) {
|
||||
var newEnv = _.clone( env );
|
||||
newEnv.topic = _.isFunction( destination.topic ) ? destination.topic( env.topic ) : destination.topic || env.topic;
|
||||
newEnv.channel = destChannel;
|
||||
newEnv.data = data;
|
||||
self.publish( newEnv );
|
||||
}
|
||||
} )
|
||||
);
|
||||
});
|
||||
});
|
||||
return result;
|
||||
},
|
||||
|
||||
noConflict: function() {
|
||||
if(typeof window === "undefined") {
|
||||
throw new Error("noConflict can only be used in browser clients which aren't using AMD modules");
|
||||
|
|
|
|||
26
src/linkChannels.js
Normal file
26
src/linkChannels.js
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
/*global _postal */
|
||||
_postal.linkChannels = function ( sources, destinations ) {
|
||||
var result = [], self = this;
|
||||
sources = !_.isArray( sources ) ? [ sources ] : sources;
|
||||
destinations = !_.isArray( destinations ) ? [destinations] : destinations;
|
||||
_.each( sources, function ( source ) {
|
||||
var sourceTopic = source.topic || "#";
|
||||
_.each( destinations, function ( destination ) {
|
||||
var destChannel = destination.channel || self.configuration.DEFAULT_CHANNEL;
|
||||
result.push(
|
||||
self.subscribe( {
|
||||
channel : source.channel || self.configuration.DEFAULT_CHANNEL,
|
||||
topic : sourceTopic,
|
||||
callback : function ( data, env ) {
|
||||
var newEnv = _.clone( env );
|
||||
newEnv.topic = _.isFunction( destination.topic ) ? destination.topic( env.topic ) : destination.topic || env.topic;
|
||||
newEnv.channel = destChannel;
|
||||
newEnv.data = data;
|
||||
self.publish( newEnv );
|
||||
}
|
||||
} )
|
||||
);
|
||||
});
|
||||
});
|
||||
return result;
|
||||
};
|
||||
|
|
@ -23,6 +23,7 @@
|
|||
//import("strategies.js");
|
||||
//import("AmqpBindingsResolver.js");
|
||||
//import("Api.js");
|
||||
//import("linkChannels.js");
|
||||
|
||||
/*jshint -W106 */
|
||||
if ( global && Object.prototype.hasOwnProperty.call( global, "__postalReady__" ) && _.isArray( global.__postalReady__ ) ) {
|
||||
|
|
|
|||
Loading…
Reference in a new issue