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
+ */