Skip to content

Commit 9b6d130

Browse files
committed
Merge branch 'release/v3.3.0'
2 parents 028432b + 8f18a72 commit 9b6d130

File tree

9 files changed

+116
-25
lines changed

9 files changed

+116
-25
lines changed

.versions

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,13 @@ [email protected]
1818
1919
2020
21-
fongandrew:[email protected].1
21+
fongandrew:[email protected].2
2222
2323
2424
2525
2626
27-
local-test:space:messaging@3.2.0
27+
local-test:space:messaging@3.3.0
2828
2929
3030
@@ -43,8 +43,8 @@ [email protected]
4343
4444
4545
46-
47-
space:messaging@3.2.0
46+
47+
space:messaging@3.3.0
4848
4949
5050

CHANGELOG.md

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,40 @@
11
Changelog
22
=========
3+
## 3.3.0
4+
### New features
5+
- `Space.messaging.define` helper returns object with defined serializables which makes helper more usable when using ES6 module imports/exports.
6+
Following implementation is now possible:
7+
8+
``` javascript
9+
// Defining events:
10+
export default Space.messaging.define(Space.domain.Event, {
11+
12+
BankAccountOpened: {
13+
owner: Contact,
14+
balance: Money
15+
},
16+
17+
BankAccountCredited: {
18+
balance: Money
19+
}
20+
21+
});
22+
```
23+
24+
``` javascript
25+
// Importing and using events:
26+
import events from '../events';
27+
const { BankAccountOpened } = events;
28+
29+
let event = new BankAccountOpened({
30+
sourceId: new Guid()
31+
// ...
32+
});
33+
34+
```
35+
36+
- New method `getHandledCommandTypes()` on `Space.messaging.CommandBus`
37+
338
## 3.2.0
439
### New Features
540
- `Space.messaging.Command` is now versionable, allowing older versions to be

package.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
Package.describe({
22
summary: 'Messaging infrastructure for Space applications.',
33
name: 'space:messaging',
4-
version: '3.2.0',
4+
version: '3.3.0',
55
git: 'https://github.com/meteor-space/messaging.git'
66
});
77

@@ -15,8 +15,8 @@ Package.onUse(function(api) {
1515
'check',
1616
'ejson',
1717
'ecmascript',
18-
'fongandrew:[email protected].1',
19-
18+
'fongandrew:[email protected].2',
19+
2020
]);
2121

2222
// SHARED
@@ -39,7 +39,7 @@ Package.onUse(function(api) {
3939

4040
// SHARED
4141
api.addFiles([
42-
'source/helpers.coffee',
42+
'source/helpers.js',
4343
'source/value-objects/guid.coffee',
4444
'source/serializables/event.js',
4545
'source/serializables/command.js',

source/command_bus.coffee

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ class Space.messaging.CommandBus extends Space.Object
3737

3838
getHandlerFor: (commandType) -> @_handlers[commandType]
3939

40+
getHandledCommandTypes: -> commandType for commandType of @_handlers
41+
4042
hasHandlerFor: (commandType) -> @getHandlerFor(commandType)?
4143

4244
onSend: (handler) -> @_onSendCallbacks.push handler

source/helpers.coffee

Lines changed: 0 additions & 17 deletions
This file was deleted.

source/helpers.js

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
Space.messaging.define = (BaseType, ...options) => {
2+
3+
if (!BaseType.isSerializable) {
4+
throw new Error('BaseType must extend Space.messaging.Serializable');
5+
}
6+
7+
let namespace = null;
8+
let definitions = null;
9+
let subTypes = {};
10+
11+
switch (options.length) {
12+
case 0:
13+
throw new Error(`Space.messaging.define is missing options for defining sub typs of ${BaseType}.`);
14+
case 1:
15+
if (_.isObject(options[0])) {
16+
// VALID: Definitions but no namespace provided
17+
namespace = '';
18+
definitions = options[0];
19+
} else {
20+
throw new Error(`Space.messaging.define is missing definitions for ${BaseType}.`);
21+
}
22+
break;
23+
default:
24+
// VALID: Namespace and definitions provided
25+
namespace = options[0].toString();
26+
definitions = options[1];
27+
break;
28+
}
29+
30+
_.each(definitions, (fields, className) => {
31+
let classPath = className;
32+
if (namespace !== '') classPath = `${namespace}.${className}`;
33+
let SubType = BaseType.extend(classPath);
34+
SubType.prototype.fields = () => _.extend(BaseType.prototype.fields(), fields);
35+
Space.resolvePath(namespace)[className] = SubType;
36+
subTypes[classPath] = SubType;
37+
});
38+
39+
return subTypes;
40+
41+
};

tests/unit/command_bus.unit.coffee

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,13 @@ describe 'Space.messaging.CommandBus', ->
2424
registerTwice = => @commandBus.registerHandler TestCommand, second
2525
expect(registerTwice).to.throw Error
2626

27+
it 'can provide the types of commands it can handle', ->
28+
handler = ->
29+
@commandBus.registerHandler TestCommand, handler
30+
expect(@commandBus.getHandledCommandTypes()).to.deep.equal(
31+
['Space.messaging.CommandBusStubCommand']
32+
)
33+
2734
it 'allows handler registrations to be overridden', ->
2835
first = sinon.spy()
2936
second = sinon.spy()

tests/unit/event_bus.unit.coffee

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,13 @@ describe 'Space.messaging.EventBus', ->
2626
expect(first).to.have.been.calledWith @testEvent
2727
expect(second).to.have.been.calledWith @testEvent
2828

29+
it 'can provide the types of events it can handle', ->
30+
subscriber = ->
31+
@eventBus.subscribeTo TestEvent, subscriber
32+
expect(@eventBus.getHandledEventTypes()).to.deep.equal(
33+
['Space.messaging.__tests__.EventBusStubEvent']
34+
)
35+
2936
describe 'publishing events', ->
3037

3138
it 'calls the subscription with the event', ->

tests/unit/helpers.tests.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,3 +18,19 @@ describe("Space.messaging.define", function() {
1818
});
1919

2020
});
21+
22+
describe("Space.messaging.define", function() {
23+
24+
beforeEach(function() {
25+
this.definedSerializables = Space.messaging.define(Space.messaging.Event, {
26+
FirstEvent: {},
27+
SecondEvent: {}
28+
});
29+
});
30+
31+
it("returns object with defined serializables", function() {
32+
expect(this.definedSerializables.FirstEvent).to.extend(Space.messaging.Event);
33+
expect(this.definedSerializables.SecondEvent).to.extend(Space.messaging.Event);
34+
});
35+
36+
});

0 commit comments

Comments
 (0)