mirror of
https://github.com/Hopiu/postal.js.git
synced 2026-03-16 22:20:23 +00:00
initial v0.8.0RC changes'
This commit is contained in:
parent
c64c2ae119
commit
8530716096
6 changed files with 143 additions and 272 deletions
|
|
@ -535,8 +535,8 @@ describe( "Postal", function () {
|
|||
var msgReceivedCnt = 0,
|
||||
msgData;
|
||||
before( function () {
|
||||
channel = postal.channel( { channel : "MyGlobalChannel", topic : "MyTopic" } );
|
||||
subscription = channel.subscribe( function ( data ) {
|
||||
channel = postal.channel( "MyGlobalChannel" );
|
||||
subscription = channel.subscribe( "MyTopic", function ( data ) {
|
||||
msgReceivedCnt++;
|
||||
msgData = data;
|
||||
} );
|
||||
|
|
@ -604,43 +604,7 @@ describe( "Postal", function () {
|
|||
describe( "With no channel name provided", function () {
|
||||
describe( "Using string argument", function () {
|
||||
before( function () {
|
||||
gch = postal.channel( "SomeTopic" );
|
||||
} );
|
||||
after( function () {
|
||||
gch = undefined;
|
||||
} );
|
||||
it( "channel should be of type ChannelDefinition", function () {
|
||||
expect( gch instanceof ChannelDefinition ).to.be.ok();
|
||||
} );
|
||||
it( "should set channel name to DEFAULT_CHANNEL", function () {
|
||||
expect( gch.channel ).to.be( DEFAULT_CHANNEL );
|
||||
} );
|
||||
it( "should set topic to SomeTopic", function () {
|
||||
expect( gch._topic ).to.be( "SomeTopic" );
|
||||
} );
|
||||
} );
|
||||
describe( "Using options (object) argument", function () {
|
||||
before( function () {
|
||||
gch = postal.channel( { topic : "SomeTopic" } );
|
||||
} );
|
||||
after( function () {
|
||||
gch = undefined;
|
||||
} );
|
||||
it( "channel should be of type ChannelDefinition", function () {
|
||||
expect( gch instanceof ChannelDefinition ).to.be.ok();
|
||||
} );
|
||||
it( "should set channel name to DEFAULT_CHANNEL", function () {
|
||||
expect( gch.channel ).to.be( DEFAULT_CHANNEL );
|
||||
} );
|
||||
it( "should set topic to SomeTopic", function () {
|
||||
expect( gch._topic ).to.be( "SomeTopic" );
|
||||
} );
|
||||
} );
|
||||
} );
|
||||
describe( "With channel name provided", function () {
|
||||
describe( "Using string arguments", function () {
|
||||
before( function () {
|
||||
gch = postal.channel( "SomeChannel", "SomeTopic" );
|
||||
gch = postal.channel( "SomeChannel" );
|
||||
} );
|
||||
after( function () {
|
||||
gch = undefined;
|
||||
|
|
@ -651,26 +615,6 @@ describe( "Postal", function () {
|
|||
it( "should set channel name to SomeChannel", function () {
|
||||
expect( gch.channel ).to.be( "SomeChannel" );
|
||||
} );
|
||||
it( "should set topic to SomeTopic", function () {
|
||||
expect( gch._topic ).to.be( "SomeTopic" );
|
||||
} );
|
||||
} );
|
||||
describe( "Using options (object) argument", function () {
|
||||
before( function () {
|
||||
gch = postal.channel( { channel : "SomeChannel", topic : "SomeTopic" } );
|
||||
} );
|
||||
after( function () {
|
||||
gch = undefined;
|
||||
} );
|
||||
it( "channel should be of type ChannelDefinition", function () {
|
||||
expect( gch instanceof ChannelDefinition ).to.be.ok();
|
||||
} );
|
||||
it( "should set channel name to SomeChannel", function () {
|
||||
expect( gch.channel ).to.be( "SomeChannel" );
|
||||
} );
|
||||
it( "should set topic to SomeTopic", function () {
|
||||
expect( gch._topic ).to.be( "SomeTopic" );
|
||||
} );
|
||||
} );
|
||||
} );
|
||||
} );
|
||||
|
|
@ -705,124 +649,6 @@ describe( "Postal", function () {
|
|||
expect( wireTapEnvelope[0].topic ).to.be( "Oh.Hai.There" );
|
||||
} );
|
||||
} );
|
||||
describe( "When binding channel - one source to one destination", function () {
|
||||
describe( "with only channel values provided", function () {
|
||||
var destData = [],
|
||||
destEnv = [],
|
||||
linkages;
|
||||
before( function () {
|
||||
linkages = postal.linkChannels( { channel : "sourceChannel" }, { channel : "destinationChannel" } );
|
||||
subscription = postal.subscribe( { channel : "destinationChannel", topic : "Oh.Hai.There", callback : function ( data, env ) {
|
||||
destData.push( data );
|
||||
destEnv.push( env );
|
||||
}} );
|
||||
postal.publish( "sourceChannel", "Oh.Hai.There", { data : "I'm in yer bus, linkin' to yer subscriptionz..."} );
|
||||
linkages[0].unsubscribe();
|
||||
postal.publish( "sourceChannel", "Oh.Hai.There", { data : "I'm in yer bus, linkin' to yer subscriptionz..."} );
|
||||
} );
|
||||
after( function () {
|
||||
postal.utils.reset();
|
||||
} );
|
||||
it( "linked subscription should only have been invoked once", function () {
|
||||
expect( destData.length ).to.be( 1 );
|
||||
expect( destEnv.length ).to.be( 1 );
|
||||
} );
|
||||
it( "linked subscription data should match expected results", function () {
|
||||
expect( destData[0].data ).to.be( "I'm in yer bus, linkin' to yer subscriptionz..." );
|
||||
} );
|
||||
it( "linked subscription envelope should match expected results", function () {
|
||||
expect( destEnv[0].channel ).to.be( "destinationChannel" );
|
||||
expect( destEnv[0].topic ).to.be( "Oh.Hai.There" );
|
||||
} );
|
||||
} );
|
||||
describe( "with channel and static topic values provided", function () {
|
||||
var destData = [],
|
||||
destEnv = [],
|
||||
linkages;
|
||||
before( function () {
|
||||
linkages = postal.linkChannels( { channel : "sourceChannel", topic : "Oh.Hai.There" }, { channel : "destinationChannel", topic : "kthxbye" } );
|
||||
subscription = postal.subscribe( { channel : "destinationChannel", topic : "kthxbye", callback : function ( data, env ) {
|
||||
destData.push( data );
|
||||
destEnv.push( env );
|
||||
}} );
|
||||
postal.publish( "sourceChannel", "Oh.Hai.There", { data : "I'm in yer bus, linkin' to yer subscriptionz..."} );
|
||||
linkages[0].unsubscribe();
|
||||
postal.publish( "sourceChannel", "Oh.Hai.There", { data : "I'm in yer bus, linkin' to yer subscriptionz..."} );
|
||||
} );
|
||||
after( function () {
|
||||
postal.utils.reset();
|
||||
} );
|
||||
it( "linked subscription should only have been invoked once", function () {
|
||||
expect( destData.length ).to.be( 1 );
|
||||
expect( destEnv.length ).to.be( 1 );
|
||||
} );
|
||||
it( "linked subscription data should match expected results", function () {
|
||||
expect( destData[0].data ).to.be( "I'm in yer bus, linkin' to yer subscriptionz..." );
|
||||
} );
|
||||
it( "linked subscription envelope should match expected results", function () {
|
||||
expect( destEnv[0].channel ).to.be( "destinationChannel" );
|
||||
expect( destEnv[0].topic ).to.be( "kthxbye" );
|
||||
} );
|
||||
} );
|
||||
describe( "with channel and topic transform values provided", function () {
|
||||
var destData = [],
|
||||
destEnv = [],
|
||||
linkages;
|
||||
before( function () {
|
||||
linkages = postal.linkChannels( { channel : "sourceChannel" }, { channel : "destinationChannel", topic : function ( tpc ) {
|
||||
return "NewTopic." + tpc;
|
||||
} } );
|
||||
subscription = postal.subscribe( { channel : "destinationChannel", topic : "NewTopic.Oh.Hai.There", callback : function ( data, env ) {
|
||||
destData.push( data );
|
||||
destEnv.push( env );
|
||||
}} );
|
||||
postal.publish( "sourceChannel", "Oh.Hai.There", { data : "I'm in yer bus, linkin' to yer subscriptionz..."} );
|
||||
linkages[0].unsubscribe();
|
||||
postal.publish( "sourceChannel", "Oh.Hai.There", { data : "I'm in yer bus, linkin' to yer subscriptionz..."} );
|
||||
} );
|
||||
after( function () {
|
||||
postal.utils.reset();
|
||||
} );
|
||||
it( "linked subscription should only have been invoked once", function () {
|
||||
expect( destData.length ).to.be( 1 );
|
||||
expect( destEnv.length ).to.be( 1 );
|
||||
} );
|
||||
it( "linked subscription data should match expected results", function () {
|
||||
expect( destData[0].data ).to.be( "I'm in yer bus, linkin' to yer subscriptionz..." );
|
||||
} );
|
||||
it( "linked subscription envelope should match expected results", function () {
|
||||
expect( destEnv[0].channel ).to.be( "destinationChannel" );
|
||||
expect( destEnv[0].topic ).to.be( "NewTopic.Oh.Hai.There" );
|
||||
} );
|
||||
} );
|
||||
} );
|
||||
describe( "When binding channel - one source to multiple destinations", function () {
|
||||
var destData = [],
|
||||
destEnv = [],
|
||||
callback = function ( data, env ) {
|
||||
destData.push( data );
|
||||
destEnv.push( env );
|
||||
};
|
||||
|
||||
before( function () {
|
||||
linkages = postal.linkChannels(
|
||||
{ channel : "sourceChannel", topic: "Oh.Hai.There" },
|
||||
[
|
||||
{ channel : "destinationChannel", topic: "NewTopic.Oh.Hai" },
|
||||
{ channel : "destinationChannel", topic: "NewTopic.Oh.Hai.There" }
|
||||
]);
|
||||
postal.subscribe( { channel : "destinationChannel", topic : "NewTopic.Oh.Hai", callback : callback} );
|
||||
postal.subscribe( { channel : "destinationChannel", topic : "NewTopic.Oh.Hai.There", callback : callback } );
|
||||
postal.publish( "sourceChannel", "Oh.Hai.There", { data : "I'm in yer bus, linkin' to yer subscriptionz..."} );
|
||||
} );
|
||||
after( function () {
|
||||
postal.utils.reset();
|
||||
} );
|
||||
it( "linked subscriptions should each have been called once", function () {
|
||||
expect( destData.length ).to.be( 2 );
|
||||
expect( destEnv.length ).to.be( 2 );
|
||||
} );
|
||||
});
|
||||
describe( "When calling postal.utils.reset", function () {
|
||||
var resolver;
|
||||
before( function () {
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@
|
|||
<script type="text/javascript" src="BindingsResolver.spec.js"></script>
|
||||
<script type="text/javascript" src="AmqpBindingsResolver.spec.js"></script>
|
||||
<script type="text/javascript" src="Postal.spec.js"></script>
|
||||
<script type="text/javascript" src="linkedChannels.spec.js"></script>
|
||||
<script type="text/javascript">
|
||||
mocha.run();
|
||||
</script>
|
||||
|
|
|
|||
120
spec/linkedChannels.spec.js
Normal file
120
spec/linkedChannels.spec.js
Normal file
|
|
@ -0,0 +1,120 @@
|
|||
describe("Linked Channels", function(){
|
||||
describe( "When binding channel - one source to one destination", function () {
|
||||
describe( "with only channel values provided", function () {
|
||||
var destData = [],
|
||||
destEnv = [],
|
||||
linkages;
|
||||
before( function () {
|
||||
linkages = postal.linkChannels( { channel : "sourceChannel" }, { channel : "destinationChannel" } );
|
||||
subscription = postal.subscribe( { channel : "destinationChannel", topic : "Oh.Hai.There", callback : function ( data, env ) {
|
||||
destData.push( data );
|
||||
destEnv.push( env );
|
||||
}} );
|
||||
postal.publish( "sourceChannel", "Oh.Hai.There", { data : "I'm in yer bus, linkin' to yer subscriptionz..."} );
|
||||
linkages[0].unsubscribe();
|
||||
postal.publish( "sourceChannel", "Oh.Hai.There", { data : "I'm in yer bus, linkin' to yer subscriptionz..."} );
|
||||
} );
|
||||
after( function () {
|
||||
postal.utils.reset();
|
||||
} );
|
||||
it( "linked subscription should only have been invoked once", function () {
|
||||
expect( destData.length ).to.be( 1 );
|
||||
expect( destEnv.length ).to.be( 1 );
|
||||
} );
|
||||
it( "linked subscription data should match expected results", function () {
|
||||
expect( destData[0].data ).to.be( "I'm in yer bus, linkin' to yer subscriptionz..." );
|
||||
} );
|
||||
it( "linked subscription envelope should match expected results", function () {
|
||||
expect( destEnv[0].channel ).to.be( "destinationChannel" );
|
||||
expect( destEnv[0].topic ).to.be( "Oh.Hai.There" );
|
||||
} );
|
||||
} );
|
||||
describe( "with channel and static topic values provided", function () {
|
||||
var destData = [],
|
||||
destEnv = [],
|
||||
linkages;
|
||||
before( function () {
|
||||
linkages = postal.linkChannels( { channel : "sourceChannel", topic : "Oh.Hai.There" }, { channel : "destinationChannel", topic : "kthxbye" } );
|
||||
subscription = postal.subscribe( { channel : "destinationChannel", topic : "kthxbye", callback : function ( data, env ) {
|
||||
destData.push( data );
|
||||
destEnv.push( env );
|
||||
}} );
|
||||
postal.publish( "sourceChannel", "Oh.Hai.There", { data : "I'm in yer bus, linkin' to yer subscriptionz..."} );
|
||||
linkages[0].unsubscribe();
|
||||
postal.publish( "sourceChannel", "Oh.Hai.There", { data : "I'm in yer bus, linkin' to yer subscriptionz..."} );
|
||||
} );
|
||||
after( function () {
|
||||
postal.utils.reset();
|
||||
} );
|
||||
it( "linked subscription should only have been invoked once", function () {
|
||||
expect( destData.length ).to.be( 1 );
|
||||
expect( destEnv.length ).to.be( 1 );
|
||||
} );
|
||||
it( "linked subscription data should match expected results", function () {
|
||||
expect( destData[0].data ).to.be( "I'm in yer bus, linkin' to yer subscriptionz..." );
|
||||
} );
|
||||
it( "linked subscription envelope should match expected results", function () {
|
||||
expect( destEnv[0].channel ).to.be( "destinationChannel" );
|
||||
expect( destEnv[0].topic ).to.be( "kthxbye" );
|
||||
} );
|
||||
} );
|
||||
describe( "with channel and topic transform values provided", function () {
|
||||
var destData = [],
|
||||
destEnv = [],
|
||||
linkages;
|
||||
before( function () {
|
||||
linkages = postal.linkChannels( { channel : "sourceChannel" }, { channel : "destinationChannel", topic : function ( tpc ) {
|
||||
return "NewTopic." + tpc;
|
||||
} } );
|
||||
subscription = postal.subscribe( { channel : "destinationChannel", topic : "NewTopic.Oh.Hai.There", callback : function ( data, env ) {
|
||||
destData.push( data );
|
||||
destEnv.push( env );
|
||||
}} );
|
||||
postal.publish( "sourceChannel", "Oh.Hai.There", { data : "I'm in yer bus, linkin' to yer subscriptionz..."} );
|
||||
linkages[0].unsubscribe();
|
||||
postal.publish( "sourceChannel", "Oh.Hai.There", { data : "I'm in yer bus, linkin' to yer subscriptionz..."} );
|
||||
} );
|
||||
after( function () {
|
||||
postal.utils.reset();
|
||||
} );
|
||||
it( "linked subscription should only have been invoked once", function () {
|
||||
expect( destData.length ).to.be( 1 );
|
||||
expect( destEnv.length ).to.be( 1 );
|
||||
} );
|
||||
it( "linked subscription data should match expected results", function () {
|
||||
expect( destData[0].data ).to.be( "I'm in yer bus, linkin' to yer subscriptionz..." );
|
||||
} );
|
||||
it( "linked subscription envelope should match expected results", function () {
|
||||
expect( destEnv[0].channel ).to.be( "destinationChannel" );
|
||||
expect( destEnv[0].topic ).to.be( "NewTopic.Oh.Hai.There" );
|
||||
} );
|
||||
} );
|
||||
} );
|
||||
describe( "When binding channel - one source to multiple destinations", function () {
|
||||
var destData = [],
|
||||
destEnv = [],
|
||||
callback = function ( data, env ) {
|
||||
destData.push( data );
|
||||
destEnv.push( env );
|
||||
};
|
||||
|
||||
before( function () {
|
||||
linkages = postal.linkChannels(
|
||||
{ channel : "sourceChannel", topic: "Oh.Hai.There" },
|
||||
[
|
||||
{ channel : "destinationChannel", topic: "NewTopic.Oh.Hai" },
|
||||
{ channel : "destinationChannel", topic: "NewTopic.Oh.Hai.There" }
|
||||
]);
|
||||
postal.subscribe( { channel : "destinationChannel", topic : "NewTopic.Oh.Hai", callback : callback} );
|
||||
postal.subscribe( { channel : "destinationChannel", topic : "NewTopic.Oh.Hai.There", callback : callback } );
|
||||
postal.publish( "sourceChannel", "Oh.Hai.There", { data : "I'm in yer bus, linkin' to yer subscriptionz..."} );
|
||||
} );
|
||||
after( function () {
|
||||
postal.utils.reset();
|
||||
} );
|
||||
it( "linked subscriptions should each have been called once", function () {
|
||||
expect( destData.length ).to.be( 2 );
|
||||
expect( destEnv.length ).to.be( 2 );
|
||||
} );
|
||||
});
|
||||
});
|
||||
77
src/Api.js
77
src/Api.js
|
|
@ -1,52 +1,4 @@
|
|||
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 );
|
||||
return envelope;
|
||||
},
|
||||
"2" : function ( topic, data ) {
|
||||
var envelope = { channel : DEFAULT_CHANNEL, topic : topic, timeStamp : new Date(), data : data };
|
||||
postal.configuration.bus.publish( envelope );
|
||||
return envelope;
|
||||
},
|
||||
"3" : function ( channel, topic, data ) {
|
||||
var envelope = { channel : channel, topic : topic, timeStamp : new Date(), data : data };
|
||||
postal.configuration.bus.publish( envelope );
|
||||
return envelope;
|
||||
}
|
||||
},
|
||||
channelPicker = {
|
||||
"1" : function ( chn ) {
|
||||
var channel = chn, topic, options = {};
|
||||
if ( Object.prototype.toString.call( channel ) === "[object String]" ) {
|
||||
channel = DEFAULT_CHANNEL;
|
||||
topic = chn;
|
||||
}
|
||||
else {
|
||||
channel = chn.channel || DEFAULT_CHANNEL;
|
||||
topic = chn.topic;
|
||||
options = chn.options || options;
|
||||
}
|
||||
return new postal.channelTypes[ options.type || "local" ]( channel, topic );
|
||||
},
|
||||
"2" : function ( chn, tpc ) {
|
||||
var channel = chn, topic = tpc, options = {};
|
||||
if ( Object.prototype.toString.call( tpc ) === "[object Object]" ) {
|
||||
channel = DEFAULT_CHANNEL;
|
||||
topic = chn;
|
||||
options = tpc;
|
||||
}
|
||||
return new postal.channelTypes[ options.type || "local" ]( channel, topic );
|
||||
},
|
||||
"3" : function ( channel, topic, options ) {
|
||||
return new postal.channelTypes[ options.type || "local" ]( channel, topic );
|
||||
}
|
||||
},
|
||||
sessionInfo = {};
|
||||
var sessionInfo = {};
|
||||
|
||||
// save some setup time, albeit tiny
|
||||
localBus.subscriptions[SYSTEM_CHANNEL] = {};
|
||||
|
|
@ -61,29 +13,22 @@ var postal = {
|
|||
SYSTEM_CHANNEL : SYSTEM_CHANNEL
|
||||
},
|
||||
|
||||
channelTypes : {
|
||||
local : ChannelDefinition
|
||||
},
|
||||
ChannelDefinition : ChannelDefinition,
|
||||
|
||||
channel : function () {
|
||||
var len = arguments.length;
|
||||
if ( channelPicker[len] ) {
|
||||
return channelPicker[len].apply( this, arguments );
|
||||
}
|
||||
SubscriptionDefinition: SubscriptionDefinition,
|
||||
|
||||
channel : function ( channelName ) {
|
||||
return new ChannelDefinition( channelName );
|
||||
},
|
||||
|
||||
subscribe : function ( options ) {
|
||||
var callback = options.callback,
|
||||
topic = options.topic,
|
||||
channel = options.channel || DEFAULT_CHANNEL;
|
||||
return new SubscriptionDefinition( channel, topic, callback );
|
||||
return new SubscriptionDefinition( options.channel || DEFAULT_CHANNEL, options.topic, options.callback );
|
||||
},
|
||||
|
||||
publish : function () {
|
||||
var len = arguments.length;
|
||||
if ( publishPicker[len] ) {
|
||||
return publishPicker[len].apply( this, arguments );
|
||||
}
|
||||
publish : function ( envelope ) {
|
||||
envelope.channel = envelope.channel || DEFAULT_CHANNEL;
|
||||
postal.configuration.bus.publish( envelope );
|
||||
return envelope;
|
||||
},
|
||||
|
||||
addWireTap : function ( callback ) {
|
||||
|
|
|
|||
|
|
@ -1,40 +1,18 @@
|
|||
var ChannelDefinition = function ( channelName, defaultTopic ) {
|
||||
var ChannelDefinition = function ( channelName ) {
|
||||
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] );
|
||||
}
|
||||
return arguments.length === 1 ?
|
||||
new SubscriptionDefinition( this.channel, arguments[0].topic, arguments[0].callback ) :
|
||||
new SubscriptionDefinition( this.channel, arguments[0], arguments[1] );
|
||||
},
|
||||
|
||||
publish : function ( obj ) {
|
||||
var _obj = 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 () {
|
||||
var envelope = arguments.length === 1 ? arguments[0] : { topic: arguments[0], data: arguments[1] };
|
||||
envelope.channel = this.channel;
|
||||
postal.configuration.bus.publish( envelope );
|
||||
return envelope;
|
||||
},
|
||||
|
||||
topic : function ( topic ) {
|
||||
if ( topic === this._topic ) {
|
||||
return this;
|
||||
}
|
||||
return new ChannelDefinition( this.channel, topic );
|
||||
}
|
||||
};
|
||||
|
|
|
|||
|
|
@ -30,6 +30,7 @@ var localBus = {
|
|||
},
|
||||
|
||||
publish : function ( envelope ) {
|
||||
envelope.timeStamp = new Date();
|
||||
_.each( this.wireTaps, function ( tap ) {
|
||||
tap( envelope.data, envelope );
|
||||
} );
|
||||
|
|
|
|||
Loading…
Reference in a new issue