diff --git a/README.md b/README.md index 7ee9f12..a4e828c 100644 --- a/README.md +++ b/README.md @@ -25,6 +25,14 @@ JavaScript: // doesn't specify a channel name, so it defaults to "/" (DEFAULT_CHANNEL) var channel = postal.channel( { topic: "Name.Changed" } ); +// this call is identical to the one above +var channel = postal.channel( "Name.Changed" ) + +// To specify a channel name you can do one of the following +var channel = postal.channel( { channel: "MyChannel", topic: "MyTopic" } ); +var channel = postal.channel( "MyChannel","MyTopic" ); + + // subscribe var subscription = channel.subscribe( function( data, envelope ) { $( "#example1" ).html( "Name: " + data.name ); @@ -60,13 +68,18 @@ var starChannel = postal.channel( { channel: "Doctor.Who", topic: "DrWho.*.Chang starSubscription = starChannel.subscribe( function( data ) { $( '
  • ' + data.type + " Changed: " + data.value + '
  • ' ).appendTo( "#example3" ); }); -// demonstrating how we're re-using the channel delcared above to publish, but overriding the topic in the second argument -starChannel.publish( { type: "Name", value:"Rose" }, { topic: "DrWho.NinthDoctor.Companion.Changed" } ); -starChannel.publish( { type: "Name", value:"Martha" }, { topic: "DrWho.TenthDoctor.Companion.Changed" } ); -starChannel.publish( { type: "Name", value:"Amy" }, { topic: "DrWho.Eleventh.Companion.Changed" } ); -starChannel.publish( { type: "Location", value: "The Library" }, { topic: "DrWho.Location.Changed" } ); -starChannel.publish( { type: "DrumBeat", value: "This won't trigger any subscriptions" }, { topic: "TheMaster.DrumBeat.Changed" } ); -starChannel.publish( { type: "Useless", value: "This won't trigger any subscriptions either" }, { topic: "Changed" } ); +/* + demonstrating how we're re-using the channel delcared above to publish, but overriding the topic in the second argument + note to override the topic, you have to use the "envelope" structure, which means an object like: + { channel: "myChannel", topic: "myTopic", data: { someProp: "SomeVal, moarData: "MoarValue" } }; + The only thing to note is that since we are publishing from a channel definition, you don't need to pass "channel" (in fact, it would be ignored) +*/ +starChannel.publish( { topic: "DrWho.NinthDoctor.Companion.Changed", data: { type: "Name", value:"Rose" } } ); +starChannel.publish( { topic: "DrWho.TenthDoctor.Companion.Changed", data: { type: "Name", value:"Martha" } } ); +starChannel.publish( { topic: "DrWho.Eleventh.Companion.Changed", data: { type: "Name", value:"Amy" } } ); +starChannel.publish( { topic: "DrWho.Location.Changed", data: { type: "Location", value: "The Library" } } ); +starChannel.publish( { topic: "TheMaster.DrumBeat.Changed", data: { type: "DrumBeat", value: "This won't trigger any subscriptions" } } ); +starChannel.publish( { topic: "Changed", data: { type: "Useless", value: "This won't trigger any subscriptions either" } } ); starSubscription.unsubscribe(); ``` @@ -79,7 +92,7 @@ var dupChannel = postal.channel( { topic: "WeepingAngel.*" } ), $( '
  • ' + data.value + '
  • ' ).appendTo( "#example4" ); }).ignoreDuplicates(); // demonstrating multiple channels per topic being used -// You can do it this way if you like, but the example above has nicer syntax (and less overhead) +// You can do it this way if you like, but the example above has nicer syntax (and *much* less overhead) postal.channel( { topic: "WeepingAngel.DontBlink" } ) .publish( { value:"Don't Blink" } ); postal.channel( { topic: "WeepingAngel.DontBlink" } ) diff --git a/build-browser-standard-diags.json b/build-browser-diags.json similarity index 77% rename from build-browser-standard-diags.json rename to build-browser-diags.json index bcef85f..9f41844 100644 --- a/build-browser-standard-diags.json +++ b/build-browser-diags.json @@ -1,6 +1,6 @@ { "source": "src/diags", - "output": "lib/browser/standard", + "output": "lib/browser", "lint": {}, "uglify": {}, "gzip": {}, diff --git a/build-browser-standard.json b/build-browser.json similarity index 77% rename from build-browser-standard.json rename to build-browser.json index 63711c5..79d48de 100644 --- a/build-browser-standard.json +++ b/build-browser.json @@ -1,6 +1,6 @@ { "source": "src/main", - "output": "lib/browser/standard", + "output": "lib/browser", "lint": {}, "uglify": {}, "gzip": {}, diff --git a/lib/browser/standard/postal.diagnostics.js b/lib/browser/standard/postal.diagnostics.js deleted file mode 100644 index 5defd32..0000000 --- a/lib/browser/standard/postal.diagnostics.js +++ /dev/null @@ -1,33 +0,0 @@ -(function(root, doc, factory) { - if (typeof define === "function" && define.amd) { - // AMD. Register as an anonymous module. - define(["postal", "underscore"], function(postal, _) { - return factory(postal, _, root, doc); - }); - } else { - // Browser globals - factory(root.postal, root._, root, doc); - } -}(this, document, function(postal, _, global, document, undefined) { - - // this returns a callback that, if invoked, removes the wireTap - return postal.addWireTap(function(data, envelope) { - var all = _.extend(envelope, { data: data }); - if(!JSON) { - throw "This browser or environment does not provide JSON support"; - } - try { - console.log(JSON.stringify(all)); - } - catch(exception) { - try { - all.data = "ERROR: " + exception.message; - console.log(JSON.stringify(all)); - } - catch(ex) { - console.log("Unable to parse data to JSON: " + exception); - } - } - }); - -})); \ No newline at end of file diff --git a/lib/browser/standard/postal.diagnostics.min.gz.js b/lib/browser/standard/postal.diagnostics.min.gz.js deleted file mode 100644 index 8fe66f7..0000000 Binary files a/lib/browser/standard/postal.diagnostics.min.gz.js and /dev/null differ diff --git a/lib/browser/standard/postal.diagnostics.min.js b/lib/browser/standard/postal.diagnostics.min.js deleted file mode 100644 index 6dffe94..0000000 --- a/lib/browser/standard/postal.diagnostics.min.js +++ /dev/null @@ -1 +0,0 @@ -(function(a,b,c){typeof define=="function"&&define.amd?define(["postal","underscore"],function(d,e){return c(d,e,a,b)}):c(a.postal,a._,a,b)})(this,document,function(a,b,c,d,e){return a.addWireTap(function(a,c){var d=b.extend(c,{data:a});if(!JSON)throw"This browser or environment does not provide JSON support";try{console.log(JSON.stringify(d))}catch(e){try{d.data="ERROR: "+e.message,console.log(JSON.stringify(d))}catch(f){console.log("Unable to parse data to JSON: "+e)}}})}) \ No newline at end of file diff --git a/lib/browser/standard/postal.js b/lib/browser/standard/postal.js deleted file mode 100644 index 7791255..0000000 --- a/lib/browser/standard/postal.js +++ /dev/null @@ -1,414 +0,0 @@ -/* - 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.6.0 -*/ - -(function(root, doc, factory) { - if (typeof define === "function" && define.amd) { - // AMD. Register as an anonymous module. - define(["underscore"], function(_) { - return factory(_, root, doc); - }); - } else { - // Browser globals - factory(root._, root, doc); - } -}(this, document, function(_, global, document, undefined) { - -var DEFAULT_CHANNEL = "/", - DEFAULT_PRIORITY = 50, - DEFAULT_DISPOSEAFTER = 0, - SYSTEM_CHANNEL = "postal", - NO_OP = function() { }; - -var DistinctPredicate = function() { - var previous; - return function(data) { - var eq = false; - if(_.isString(data)) { - eq = data === previous; - previous = data; - } - else { - eq = _.isEqual(data, previous); - previous = _.clone(data); - } - return !eq; - }; -}; - -var ChannelDefinition = function(channelName, defaultTopic) { - this.channel = channelName || DEFAULT_CHANNEL; - this._topic = defaultTopic || ""; -}; - -ChannelDefinition.prototype = { - subscribe: function() { - var len = arguments.length; - if(len === 1) { - return new SubscriptionDefinition(this.channel, this._topic, arguments[0]); - } - else if (len === 2) { - return new SubscriptionDefinition(this.channel, arguments[0], arguments[1]); - } - }, - - publish: function(obj) { - var envelope = { - channel: this.channel, - topic: this._topic, - data: obj - }; - // If this is an envelope.... - if( obj.topic && obj.data ) { - envelope = obj; - envelope.channel = envelope.channel || this.channel; - } - envelope.timeStamp = new Date(); - postal.configuration.bus.publish(envelope); - }, - - topic: function(topic) { - if(topic === this._topic) { - return this; - } - return new ChannelDefinition(this.channel, topic); - } -}; - -var SubscriptionDefinition = function(channel, topic, callback) { - this.channel = channel; - this.topic = topic; - this.callback = callback; - this.priority = DEFAULT_PRIORITY; - this.constraints = new Array(0); - this.maxCalls = DEFAULT_DISPOSEAFTER; - this.onHandled = NO_OP; - this.context = null; - postal.configuration.bus.publish({ - channel: SYSTEM_CHANNEL, - topic: "subscription.created", - timeStamp: new Date(), - data: { - event: "subscription.created", - channel: channel, - topic: topic - } - }); - - postal.configuration.bus.subscribe(this); - -}; - -SubscriptionDefinition.prototype = { - unsubscribe: function() { - postal.configuration.bus.unsubscribe(this); - postal.configuration.bus.publish({ - channel: SYSTEM_CHANNEL, - topic: "subscription.removed", - timeStamp: new Date(), - data: { - event: "subscription.removed", - channel: this.channel, - topic: this.topic - } - }); - }, - - defer: function() { - var fn = this.callback; - this.callback = function(data) { - setTimeout(fn,0,data); - }; - return this; - }, - - disposeAfter: function(maxCalls) { - if(_.isNaN(maxCalls) || maxCalls <= 0) { - throw "The value provided to disposeAfter (maxCalls) must be a number greater than zero."; - } - - var fn = this.onHandled; - var dispose = _.after(maxCalls, _.bind(function() { - this.unsubscribe(this); - }, this)); - - this.onHandled = function() { - fn.apply(this.context, arguments); - dispose(); - }; - return this; - }, - - ignoreDuplicates: function() { - this.withConstraint(new DistinctPredicate()); - return this; - }, - - whenHandledThenExecute: function(callback) { - if(! _.isFunction(callback)) { - throw "Value provided to 'whenHandledThenExecute' must be a function"; - } - this.onHandled = callback; - return this; - }, - - withConstraint: function(predicate) { - if(! _.isFunction(predicate)) { - throw "Predicate constraint must be a function"; - } - this.constraints.push(predicate); - return this; - }, - - withConstraints: function(predicates) { - var self = this; - if(_.isArray(predicates)) { - _.each(predicates, function(predicate) { self.withConstraint(predicate); } ); - } - return self; - }, - - withContext: function(context) { - this.context = context; - return this; - }, - - withDebounce: function(milliseconds) { - if(_.isNaN(milliseconds)) { - throw "Milliseconds must be a number"; - } - var fn = this.callback; - this.callback = _.debounce(fn, milliseconds); - return this; - }, - - withDelay: function(milliseconds) { - if(_.isNaN(milliseconds)) { - throw "Milliseconds must be a number"; - } - var fn = this.callback; - this.callback = function(data) { - setTimeout(fn, milliseconds, data); - }; - return this; - }, - - withPriority: function(priority) { - if(_.isNaN(priority)) { - throw "Priority must be a number"; - } - this.priority = priority; - return this; - }, - - withThrottle: function(milliseconds) { - if(_.isNaN(milliseconds)) { - throw "Milliseconds must be a number"; - } - var fn = this.callback; - this.callback = _.throttle(fn, milliseconds); - return this; - }, - - subscribe: function(callbacl) { - this.callback = callback; - return this; - } -}; - -var bindingsResolver = { - cache: { }, - - compare: function(binding, topic) { - if(this.cache[topic] && this.cache[topic][binding]) { - return true; - } - // binding.replace(/\./g,"\\.") // escape actual periods - // .replace(/\*/g, ".*") // asterisks match any value - // .replace(/#/g, "[A-Z,a-z,0-9]*"); // hash matches any alpha-numeric 'word' - var rgx = new RegExp("^" + binding.replace(/\./g,"\\.").replace(/\*/g, ".*").replace(/#/g, "[A-Z,a-z,0-9]*") + "$"), - result = rgx.test(topic); - if(result) { - if(!this.cache[topic]) { - this.cache[topic] = {}; - } - this.cache[topic][binding] = true; - } - return result; - } -}; - -var localBus = { - - subscriptions: {}, - - wireTaps: new Array(0), - - publish: function(envelope) { - _.each(this.wireTaps,function(tap) { - tap(envelope.data, envelope); - }); - - _.each(this.subscriptions[envelope.channel], function(topic) { - _.each(topic, function(subDef){ - if(postal.configuration.resolver.compare(subDef.topic, envelope.topic)) { - if(_.all(subDef.constraints, function(constraint) { return constraint(envelope.data); })) { - if(typeof subDef.callback === 'function') { - subDef.callback.apply(subDef.context, [envelope.data, envelope]); - subDef.onHandled(); - } - } - } - }); - }); - }, - - subscribe: function(subDef) { - var idx, found, fn, channel = this.subscriptions[subDef.channel], subs; - - if(!channel) { - channel = this.subscriptions[subDef.channel] = {}; - } - subs = this.subscriptions[subDef.channel][subDef.topic]; - if(!subs) { - subs = this.subscriptions[subDef.channel][subDef.topic] = new Array(0); - } - - idx = subs.length - 1; - for(; idx >= 0; idx--) { - if(subs[idx].priority <= subDef.priority) { - subs.splice(idx + 1, 0, subDef); - found = true; - break; - } - } - if(!found) { - subs.unshift(subDef); - } - return subDef; - }, - - unsubscribe: function(config) { - if(this.subscriptions[config.channel][config.topic]) { - var len = this.subscriptions[config.channel][config.topic].length, - idx = 0; - for ( ; idx < len; idx++ ) { - if (this.subscriptions[config.channel][config.topic][idx] === config) { - this.subscriptions[config.channel][config.topic].splice( idx, 1 ); - break; - } - } - } - }, - - addWireTap: function(callback) { - var self = this; - self.wireTaps.push(callback); - return function() { - var idx = self.wireTaps.indexOf(callback); - if(idx !== -1) { - self.wireTaps.splice(idx,1); - } - }; - } -}; - -var publishPicker = { - "1" : function(envelope) { - if(!envelope) { - throw new Error("publishing from the 'global' postal.publish call requires a valid envelope."); - } - envelope.channel = envelope.channel || DEFAULT_CHANNEL; - envelope.timeStamp = new Date(); - postal.configuration.bus.publish(envelope); - }, - "2" : function(topic, data) { - postal.configuration.bus.publish({ channel: DEFAULT_CHANNEL, topic: topic, timeStamp: new Date(), data: data }); - }, - "3" : function(channel, topic, data) { - postal.configuration.bus.publish({ channel: channel, topic: topic, timeStamp: new Date(), data: data }); - } -}; - -// save some setup time, albeit tiny -localBus.subscriptions[SYSTEM_CHANNEL] = {}; - -var postal = { - configuration: { - bus: localBus, - resolver: bindingsResolver - }, - - channel: function() { - var len = arguments.length, - channel = arguments[0], - tpc = arguments[1]; - if(len === 1) { - if(Object.prototype.toString.call(channel) === "[object String]") { - channel = DEFAULT_CHANNEL; - tpc = arguments[0]; - } - else { - channel = arguments[0].channel || DEFAULT_CHANNEL; - tpc = arguments[0].topic; - } - } - return new ChannelDefinition(channel, tpc); - }, - - subscribe: function(options) { - var callback = options.callback, - topic = options.topic, - channel = options.channel || DEFAULT_CHANNEL; - return new SubscriptionDefinition(channel, topic, callback); - }, - - publish: function() { - var len = arguments.length; - if(publishPicker[len]) { - publishPicker[len].apply(this, arguments); - } - }, - - addWireTap: function(callback) { - return this.configuration.bus.addWireTap(callback); - }, - - linkChannels: function(sources, destinations) { - var result = []; - if(!_.isArray(sources)) { - sources = [sources]; - } - if(!_.isArray(destinations)) { - destinations = [destinations]; - } - _.each(sources, function(source){ - var sourceTopic = source.topic || "*"; - _.each(destinations, function(destination) { - var destChannel = destination.channel || DEFAULT_CHANNEL; - result.push( - postal.subscribe({ - channel: source.channel || DEFAULT_CHANNEL, - topic: source.topic || "*", - callback : function(data, env) { - var newEnv = env; - newEnv.topic = _.isFunction(destination.topic) ? destination.topic(env.topic) : destination.topic || env.topic; - newEnv.channel = destChannel; - newEnv.data = data; - postal.publish(newEnv); - } - }) - ); - }); - }); - return result; - } -}; - - - global.postal = postal; - return postal; -})); \ No newline at end of file diff --git a/lib/browser/standard/postal.min.gz.js b/lib/browser/standard/postal.min.gz.js deleted file mode 100644 index f93772f..0000000 Binary files a/lib/browser/standard/postal.min.gz.js and /dev/null differ diff --git a/lib/browser/standard/postal.min.js b/lib/browser/standard/postal.min.js deleted file mode 100644 index 4ad9154..0000000 --- a/lib/browser/standard/postal.min.js +++ /dev/null @@ -1 +0,0 @@ -(function(a,b,c){typeof define=="function"&&define.amd?define(["underscore"],function(d){return c(d,a,b)}):c(a._,a,b)})(this,document,function(a,b,c,d){var e="/",f=50,g=0,h="postal",i=function(){},j=function(){var b;return function(c){var d=!1;return a.isString(c)?(d=c===b,b=c):(d=a.isEqual(c,b),b=a.clone(c)),!d}},k=function(a,b){this.channel=a||e,this._topic=b||""};k.prototype={subscribe:function(){var a=arguments.length;if(a===1)return new l(this.channel,this._topic,arguments[0]);if(a===2)return new l(this.channel,arguments[0],arguments[1])},publish:function(a){var b={channel:this.channel,topic:this._topic,data:a};a.topic&&a.data&&(b=a,b.channel=b.channel||this.channel),b.timeStamp=new Date,p.configuration.bus.publish(b)},topic:function(a){return a===this._topic?this:new k(this.channel,a)}};var l=function(a,b,c){this.channel=a,this.topic=b,this.callback=c,this.priority=f,this.constraints=new Array(0),this.maxCalls=g,this.onHandled=i,this.context=null,p.configuration.bus.publish({channel:h,topic:"subscription.created",timeStamp:new Date,data:{event:"subscription.created",channel:a,topic:b}}),p.configuration.bus.subscribe(this)};l.prototype={unsubscribe:function(){p.configuration.bus.unsubscribe(this),p.configuration.bus.publish({channel:h,topic:"subscription.removed",timeStamp:new Date,data:{event:"subscription.removed",channel:this.channel,topic:this.topic}})},defer:function(){var a=this.callback;return this.callback=function(b){setTimeout(a,0,b)},this},disposeAfter:function(b){if(a.isNaN(b)||b<=0)throw"The value provided to disposeAfter (maxCalls) must be a number greater than zero.";var c=this.onHandled,d=a.after(b,a.bind(function(){this.unsubscribe(this)},this));return this.onHandled=function(){c.apply(this.context,arguments),d()},this},ignoreDuplicates:function(){return this.withConstraint(new j),this},whenHandledThenExecute:function(b){if(!a.isFunction(b))throw"Value provided to 'whenHandledThenExecute' must be a function";return this.onHandled=b,this},withConstraint:function(b){if(!a.isFunction(b))throw"Predicate constraint must be a function";return this.constraints.push(b),this},withConstraints:function(b){var c=this;return a.isArray(b)&&a.each(b,function(a){c.withConstraint(a)}),c},withContext:function(a){return this.context=a,this},withDebounce:function(b){if(a.isNaN(b))throw"Milliseconds must be a number";var c=this.callback;return this.callback=a.debounce(c,b),this},withDelay:function(b){if(a.isNaN(b))throw"Milliseconds must be a number";var c=this.callback;return this.callback=function(a){setTimeout(c,b,a)},this},withPriority:function(b){if(a.isNaN(b))throw"Priority must be a number";return this.priority=b,this},withThrottle:function(b){if(a.isNaN(b))throw"Milliseconds must be a number";var c=this.callback;return this.callback=a.throttle(c,b),this},subscribe:function(a){return this.callback=callback,this}};var m={cache:{},compare:function(a,b){if(this.cache[b]&&this.cache[b][a])return!0;var c=new RegExp("^"+a.replace(/\./g,"\\.").replace(/\*/g,".*").replace(/#/g,"[A-Z,a-z,0-9]*")+"$"),d=c.test(b);return d&&(this.cache[b]||(this.cache[b]={}),this.cache[b][a]=!0),d}},n={subscriptions:{},wireTaps:new Array(0),publish:function(b){a.each(this.wireTaps,function(a){a(b.data,b)}),a.each(this.subscriptions[b.channel],function(c){a.each(c,function(c){p.configuration.resolver.compare(c.topic,b.topic)&&a.all(c.constraints,function(a){return a(b.data)})&&typeof c.callback=="function"&&(c.callback.apply(c.context,[b.data,b]),c.onHandled())})})},subscribe:function(a){var b,c,d,e=this.subscriptions[a.channel],f;e||(e=this.subscriptions[a.channel]={}),f=this.subscriptions[a.channel][a.topic],f||(f=this.subscriptions[a.channel][a.topic]=new Array(0)),b=f.length-1;for(;b>=0;b--)if(f[b].priority<=a.priority){f.splice(b+1,0,a),c=!0;break}return c||f.unshift(a),a},unsubscribe:function(a){if(this.subscriptions[a.channel][a.topic]){var b=this.subscriptions[a.channel][a.topic].length,c=0;for(;c - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + -

    +

    diff --git a/src/main/BindingsResolver.js b/src/main/BindingsResolver.js index da1d5a3..7557302 100644 --- a/src/main/BindingsResolver.js +++ b/src/main/BindingsResolver.js @@ -1,21 +1,21 @@ var bindingsResolver = { - cache: { }, + cache: { }, - compare: function(binding, topic) { - if(this.cache[topic] && this.cache[topic][binding]) { - return true; - } - // binding.replace(/\./g,"\\.") // escape actual periods - // .replace(/\*/g, ".*") // asterisks match any value - // .replace(/#/g, "[A-Z,a-z,0-9]*"); // hash matches any alpha-numeric 'word' - var rgx = new RegExp("^" + binding.replace(/\./g,"\\.").replace(/\*/g, ".*").replace(/#/g, "[A-Z,a-z,0-9]*") + "$"), - result = rgx.test(topic); - if(result) { - if(!this.cache[topic]) { - this.cache[topic] = {}; - } - this.cache[topic][binding] = true; - } - return result; - } + compare: function(binding, topic) { + if(this.cache[topic] && this.cache[topic][binding]) { + return true; + } + // binding.replace(/\./g,"\\.") // escape actual periods + // .replace(/\*/g, ".*") // asterisks match any value + // .replace(/#/g, "[A-Z,a-z,0-9]*"); // hash matches any alpha-numeric 'word' + var rgx = new RegExp("^" + binding.replace(/\./g,"\\.").replace(/\*/g, ".*").replace(/#/g, "[A-Z,a-z,0-9]*") + "$"), + result = rgx.test(topic); + if(result) { + if(!this.cache[topic]) { + this.cache[topic] = {}; + } + this.cache[topic][binding] = true; + } + return result; + } }; diff --git a/src/main/ChannelDefinition.js b/src/main/ChannelDefinition.js index 8db0848..c5ae132 100644 --- a/src/main/ChannelDefinition.js +++ b/src/main/ChannelDefinition.js @@ -1,33 +1,33 @@ var ChannelDefinition = function(channelName, defaultTopic) { - this.channel = channelName || DEFAULT_CHANNEL; - this._topic = defaultTopic || ""; + this.channel = channelName || DEFAULT_CHANNEL; + this._topic = defaultTopic || ""; }; ChannelDefinition.prototype = { - subscribe: function() { - var len = arguments.length; - if(len === 1) { - return new SubscriptionDefinition(this.channel, this._topic, arguments[0]); - } - else if (len === 2) { - return new SubscriptionDefinition(this.channel, arguments[0], arguments[1]); - } - }, + subscribe: function() { + var len = arguments.length; + if(len === 1) { + return new SubscriptionDefinition(this.channel, this._topic, arguments[0]); + } + else if (len === 2) { + return new SubscriptionDefinition(this.channel, arguments[0], arguments[1]); + } + }, - publish: function(obj) { - var envelope = { - channel: this.channel, - topic: this._topic, - data: obj - }; - // If this is an envelope.... - if( obj.topic && obj.data ) { - envelope = obj; - envelope.channel = envelope.channel || this.channel; - } - envelope.timeStamp = new Date(); + publish: function(obj) { + var envelope = { + channel: this.channel, + topic: this._topic, + data: obj + }; + // If this is an envelope.... + if( obj.topic && obj.data ) { + envelope = obj; + envelope.channel = envelope.channel || this.channel; + } + envelope.timeStamp = new Date(); postal.configuration.bus.publish(envelope); - }, + }, topic: function(topic) { if(topic === this._topic) { diff --git a/src/main/Constants.js b/src/main/Constants.js index ac13e2a..411258a 100644 --- a/src/main/Constants.js +++ b/src/main/Constants.js @@ -1,5 +1,5 @@ var DEFAULT_CHANNEL = "/", - DEFAULT_PRIORITY = 50, - DEFAULT_DISPOSEAFTER = 0, - SYSTEM_CHANNEL = "postal", - NO_OP = function() { }; + DEFAULT_PRIORITY = 50, + DEFAULT_DISPOSEAFTER = 0, + SYSTEM_CHANNEL = "postal", + NO_OP = function() { }; diff --git a/src/main/DistinctPredicate.js b/src/main/DistinctPredicate.js index a6abd18..6e443be 100644 --- a/src/main/DistinctPredicate.js +++ b/src/main/DistinctPredicate.js @@ -1,15 +1,15 @@ var DistinctPredicate = function() { - var previous; - return function(data) { - var eq = false; - if(_.isString(data)) { - eq = data === previous; - previous = data; - } - else { - eq = _.isEqual(data, previous); - previous = _.clone(data); - } - return !eq; - }; + var previous; + return function(data) { + var eq = false; + if(_.isString(data)) { + eq = data === previous; + previous = data; + } + else { + eq = _.isEqual(data, previous); + previous = _.clone(data); + } + return !eq; + }; }; diff --git a/src/main/SubscriptionDefinition.js b/src/main/SubscriptionDefinition.js index 55a86ec..31fa801 100644 --- a/src/main/SubscriptionDefinition.js +++ b/src/main/SubscriptionDefinition.js @@ -8,14 +8,14 @@ var SubscriptionDefinition = function(channel, topic, callback) { this.onHandled = NO_OP; this.context = null; postal.configuration.bus.publish({ - channel: SYSTEM_CHANNEL, - topic: "subscription.created", - timeStamp: new Date(), - data: { - event: "subscription.created", - channel: channel, - topic: topic - } + channel: SYSTEM_CHANNEL, + topic: "subscription.created", + timeStamp: new Date(), + data: { + event: "subscription.created", + channel: channel, + topic: topic + } }); postal.configuration.bus.subscribe(this); diff --git a/src/main/VersionHeader.js b/src/main/VersionHeader.js index 388e7f2..d61c1cd 100644 --- a/src/main/VersionHeader.js +++ b/src/main/VersionHeader.js @@ -1,6 +1,6 @@ /* - 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.6.0 -*/ + 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.6.0 + */