synapse-mongo 0.2.0 → 0.3.1
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/synapse-mongo.rb +1 -0
- data/lib/synapse/configuration/event_store/mongo.rb +10 -0
- data/lib/synapse/configuration/event_store/mongo/event_store.rb +96 -0
- data/lib/synapse/configuration/mongo.rb +2 -0
- data/lib/synapse/configuration/process_manager/mongo.rb +10 -0
- data/lib/synapse/configuration/process_manager/mongo/process_repository.rb +77 -0
- data/lib/synapse/event_store/mongo/event_store.rb +1 -3
- data/lib/synapse/mongo/version.rb +1 -1
- data/test/common/mongo/base_template_test.rb +1 -1
- data/test/configuration/mongo/event_store_test.rb +28 -0
- data/test/configuration/mongo/process_manager_test.rb +27 -0
- data/test/event_store/mongo/event_store_test.rb +1 -1
- data/test/process_manager/mongo/repository_test.rb +3 -3
- data/test/serialization/converter/bson_test.rb +1 -1
- data/test/test_helper.rb +5 -2
- metadata +13 -6
data/lib/synapse-mongo.rb
CHANGED
@@ -0,0 +1,10 @@
|
|
1
|
+
require 'synapse/configuration/event_store/mongo/event_store'
|
2
|
+
|
3
|
+
module Synapse
|
4
|
+
module Configuration
|
5
|
+
class ContainerBuilder
|
6
|
+
# Creates and configures a Mongo event store
|
7
|
+
builder :mongo_event_store, MongoEventStoreDefinitionBuilder
|
8
|
+
end # ContainerBuilder
|
9
|
+
end # Configuration
|
10
|
+
end
|
@@ -0,0 +1,96 @@
|
|
1
|
+
module Synapse
|
2
|
+
module Configuration
|
3
|
+
# Definition builder used to create a Mongo-backed event store
|
4
|
+
#
|
5
|
+
# @example The minimum possible effort to build an event store
|
6
|
+
# mongo_event_store do
|
7
|
+
# use_client Mongo::MongoClient.new
|
8
|
+
# end
|
9
|
+
#
|
10
|
+
# @example Mix it up a bit
|
11
|
+
# mongo_event_store :alt_event_store do
|
12
|
+
# use_per_event_strategy
|
13
|
+
#
|
14
|
+
# use_serializer :alt_serializer
|
15
|
+
# use_upcaster_chain :alt_upcaster_chain
|
16
|
+
# use_template :alt_template
|
17
|
+
# end
|
18
|
+
class MongoEventStoreDefinitionBuilder < DefinitionBuilder
|
19
|
+
# Convenience method that creates an event store template with the given Mongo client
|
20
|
+
#
|
21
|
+
# @param [Mongo::MongoClient] client
|
22
|
+
# @return [undefined]
|
23
|
+
def use_client(client)
|
24
|
+
@template = EventStore::Mongo::Template.new client
|
25
|
+
end
|
26
|
+
|
27
|
+
# Changes the type of storage strategy to document-per-commit
|
28
|
+
#
|
29
|
+
# @see EventStore::Mongo::DocumentPerCommitStrategy
|
30
|
+
# @return [undefined]
|
31
|
+
def use_per_commit_strategy
|
32
|
+
@storage_strategy_type = EventStore::Mongo::DocumentPerCommitStrategy
|
33
|
+
end
|
34
|
+
|
35
|
+
# Changes the type of storage strategy to document-per-event
|
36
|
+
#
|
37
|
+
# @see EventStore::Mongo::DocumentPerEventStrategy
|
38
|
+
# @return [undefined]
|
39
|
+
def use_per_event_strategy
|
40
|
+
@storage_strategy_type = EventStore::Mongo::DocumentPerEventStrategy
|
41
|
+
end
|
42
|
+
|
43
|
+
# Changes the serializer to use with this event store
|
44
|
+
#
|
45
|
+
# @see Serialization::Serializer
|
46
|
+
# @param [Symbol] serializer
|
47
|
+
# @return [undefined]
|
48
|
+
def use_serializer(serializer)
|
49
|
+
@serializer = serializer
|
50
|
+
end
|
51
|
+
|
52
|
+
# Changes the Mongo template to use with this event store
|
53
|
+
#
|
54
|
+
# @see EventStore::Mongo::Template
|
55
|
+
# @param [Symbol] template
|
56
|
+
# @return [undefined]
|
57
|
+
def use_template(template)
|
58
|
+
@template = template
|
59
|
+
end
|
60
|
+
|
61
|
+
# Changes the upcaster chain to use with this event store
|
62
|
+
#
|
63
|
+
# @see Upcasting::UpcasterChain
|
64
|
+
# @param [Symbol] upcaster_chain
|
65
|
+
# @return [undefined]
|
66
|
+
def use_upcaster_chain(upcaster_chain)
|
67
|
+
@upcaster_chain = upcaster_chain
|
68
|
+
end
|
69
|
+
|
70
|
+
protected
|
71
|
+
|
72
|
+
# @return [undefined]
|
73
|
+
def populate_defaults
|
74
|
+
identified_by :event_store
|
75
|
+
|
76
|
+
use_serializer :serializer
|
77
|
+
use_per_commit_strategy
|
78
|
+
use_template :mongo_event_store_template
|
79
|
+
use_upcaster_chain :upcaster_chain
|
80
|
+
|
81
|
+
use_factory do
|
82
|
+
serializer = resolve @serializer
|
83
|
+
template = resolve @template
|
84
|
+
upcaster_chain = resolve @upcaster_chain
|
85
|
+
|
86
|
+
strategy = @storage_strategy_type.new template, serializer, upcaster_chain
|
87
|
+
|
88
|
+
event_store = EventStore::Mongo::MongoEventStore.new template, strategy
|
89
|
+
event_store.ensure_indexes
|
90
|
+
|
91
|
+
event_store
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end # MongoEventStoreDefinitionBuilder
|
95
|
+
end # Configuration
|
96
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
require 'synapse/configuration/process_manager/mongo/process_repository'
|
2
|
+
|
3
|
+
module Synapse
|
4
|
+
module Configuration
|
5
|
+
class ContainerBuilder
|
6
|
+
# Creates and configures a Mongo process repository
|
7
|
+
builder :mongo_process_repository, MongoProcessRepositoryDefinitionBuilder
|
8
|
+
end # ContainerBuilder
|
9
|
+
end # Configuration
|
10
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
module Synapse
|
2
|
+
module Configuration
|
3
|
+
# Definition builder used to create a Mongo-backed process repository
|
4
|
+
#
|
5
|
+
# @example The minimum possible effort to build a process repository
|
6
|
+
# mongo_process_repository do
|
7
|
+
# use_client Mongo::MongoClient.new
|
8
|
+
# end
|
9
|
+
#
|
10
|
+
# @example Mix it up a bit
|
11
|
+
# mongo_process_repository :alt_process_repository do
|
12
|
+
# use_resource_injector :alt_resource_injector
|
13
|
+
# use_serializer :alt_serializer
|
14
|
+
# use_template :alt_template
|
15
|
+
# end
|
16
|
+
class MongoProcessRepositoryDefinitionBuilder < DefinitionBuilder
|
17
|
+
# Convenience method that creates a process repository template with the given Mongo client
|
18
|
+
#
|
19
|
+
# @param [Mongo::MongoClient] client
|
20
|
+
# @return [undefined]
|
21
|
+
def use_client(client)
|
22
|
+
@template = ProcessManager::Mongo::Template.new client
|
23
|
+
end
|
24
|
+
|
25
|
+
# Changes the serializer to use with this process repository
|
26
|
+
#
|
27
|
+
# @see Serialization::Serializer
|
28
|
+
# @param [Symbol] serializer
|
29
|
+
# @return [undefined]
|
30
|
+
def use_serializer(serializer)
|
31
|
+
@serializer = serializer
|
32
|
+
end
|
33
|
+
|
34
|
+
# Changes the Mongo template to use with this process repository
|
35
|
+
#
|
36
|
+
# @see ProcessManager::Mongo::Template
|
37
|
+
# @param [Symbol] template
|
38
|
+
# @return [undefined]
|
39
|
+
def use_template(template)
|
40
|
+
@template = template
|
41
|
+
end
|
42
|
+
|
43
|
+
# Changes the resource injector to use with this process repository
|
44
|
+
#
|
45
|
+
# @see ProcessManager::ResourceInjector
|
46
|
+
# @param [Symbol] resource_injector
|
47
|
+
# @return [undefined]
|
48
|
+
def use_resource_injector(resource_injector)
|
49
|
+
@resource_injector = resource_injector
|
50
|
+
end
|
51
|
+
|
52
|
+
protected
|
53
|
+
|
54
|
+
# @return [undefined]
|
55
|
+
def populate_defaults
|
56
|
+
identified_by :process_repository
|
57
|
+
|
58
|
+
use_resource_injector :resource_injector
|
59
|
+
use_serializer :serializer
|
60
|
+
use_template :mongo_process_repository_template
|
61
|
+
|
62
|
+
use_factory do
|
63
|
+
serializer = resolve @serializer
|
64
|
+
template = resolve @template
|
65
|
+
resource_injector = resolve @resource_injector, true
|
66
|
+
|
67
|
+
process_repository = ProcessManager::Mongo::MongoProcessRepository.new serializer, template
|
68
|
+
if resource_injector
|
69
|
+
process_factory.resource_injector = resource_injector
|
70
|
+
end
|
71
|
+
|
72
|
+
process_repository
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end # MongoProcessRepositoryDefinitionBuilder
|
76
|
+
end # Configuration
|
77
|
+
end
|
@@ -75,9 +75,7 @@ module Synapse
|
|
75
75
|
def load_last_snapshot(type_identifier, aggregate_id)
|
76
76
|
cursor = @storage_strategy.fetch_last_snapshot type_identifier, aggregate_id
|
77
77
|
|
78
|
-
unless cursor.has_next?
|
79
|
-
return
|
80
|
-
end
|
78
|
+
return unless cursor.has_next?
|
81
79
|
|
82
80
|
first = cursor.next_document
|
83
81
|
@storage_strategy.extract_events first, aggregate_id
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module Synapse
|
4
|
+
module Configuration
|
5
|
+
class MongoEventStoreDefinitionBuilderTest < Test::Unit::TestCase
|
6
|
+
|
7
|
+
def setup
|
8
|
+
@container = Container.new
|
9
|
+
@builder = ContainerBuilder.new @container
|
10
|
+
end
|
11
|
+
|
12
|
+
should 'build with sensible defaults' do
|
13
|
+
@builder.converter_factory
|
14
|
+
@builder.serializer
|
15
|
+
@builder.upcaster_chain
|
16
|
+
|
17
|
+
@builder.mongo_event_store do
|
18
|
+
use_client ::Mongo::MongoClient.new
|
19
|
+
end
|
20
|
+
|
21
|
+
event_store = @container.resolve :event_store
|
22
|
+
|
23
|
+
assert_instance_of EventStore::Mongo::MongoEventStore, event_store
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module Synapse
|
4
|
+
module Configuration
|
5
|
+
class MongoProcessRepositoryDefinitionBuilderTest < Test::Unit::TestCase
|
6
|
+
|
7
|
+
def setup
|
8
|
+
@container = Container.new
|
9
|
+
@builder = ContainerBuilder.new @container
|
10
|
+
end
|
11
|
+
|
12
|
+
should 'build with sensible defaults' do
|
13
|
+
@builder.converter_factory
|
14
|
+
@builder.serializer
|
15
|
+
|
16
|
+
@builder.mongo_process_repository do
|
17
|
+
use_client ::Mongo::MongoClient.new
|
18
|
+
end
|
19
|
+
|
20
|
+
repository = @container.resolve :process_repository
|
21
|
+
|
22
|
+
assert_instance_of ProcessManager::Mongo::MongoProcessRepository, repository
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -5,7 +5,7 @@ module Synapse
|
|
5
5
|
module Mongo
|
6
6
|
|
7
7
|
class MongoEventStoreTest < Test::Unit::TestCase
|
8
|
-
|
8
|
+
should 'integrate with different storage strategies' do
|
9
9
|
client = ::Mongo::MongoClient.new
|
10
10
|
template = Template.new client
|
11
11
|
template.event_collection.drop
|
@@ -16,7 +16,7 @@ module Synapse
|
|
16
16
|
@repository = MongoProcessRepository.new serializer, template
|
17
17
|
end
|
18
18
|
|
19
|
-
|
19
|
+
should 'persist processes to the database' do
|
20
20
|
process = Process.new
|
21
21
|
|
22
22
|
@repository.add process
|
@@ -26,7 +26,7 @@ module Synapse
|
|
26
26
|
assert_equal 0, process.correlations.additions.count
|
27
27
|
end
|
28
28
|
|
29
|
-
|
29
|
+
should 'commit changes to processes to the database' do
|
30
30
|
correlation = Correlation.new :order_id, '123'
|
31
31
|
|
32
32
|
process = Process.new
|
@@ -45,7 +45,7 @@ module Synapse
|
|
45
45
|
assert_nil @repository.load process.id
|
46
46
|
end
|
47
47
|
|
48
|
-
|
48
|
+
should 'support finding processes by their correlation keys' do
|
49
49
|
correlation_a = Correlation.new :order_id, '123'
|
50
50
|
correlation_b = Correlation.new :order_id, '456'
|
51
51
|
|
@@ -3,7 +3,7 @@ require 'test_helper'
|
|
3
3
|
module Synapse
|
4
4
|
module Serialization
|
5
5
|
class OrderedHashToHashConverterTest < Test::Unit::TestCase
|
6
|
-
|
6
|
+
should 'convert a BSON ordered hash to a normal hash' do
|
7
7
|
converter = OrderedHashToHashConverter.new
|
8
8
|
|
9
9
|
assert_equal BSON::OrderedHash, converter.source_type
|
data/test/test_helper.rb
CHANGED
@@ -6,9 +6,12 @@ end
|
|
6
6
|
|
7
7
|
require 'pp'
|
8
8
|
require 'test/unit'
|
9
|
+
require 'shoulda/context'
|
9
10
|
require 'rr'
|
10
11
|
require 'synapse-mongo'
|
11
12
|
|
12
|
-
|
13
|
-
|
13
|
+
# I guess RR broke
|
14
|
+
# http://stackoverflow.com/questions/3657972
|
15
|
+
unless defined? Test::Unit::AssertionFailedError
|
16
|
+
Test::Unit::AssertionFailedError = ActiveSupport::TestCase::Assertion
|
14
17
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: synapse-mongo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,24 +9,24 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-06-03 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: synapse-core
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
|
-
- -
|
19
|
+
- - ~>
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version: 0.
|
21
|
+
version: '0.5'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
25
|
none: false
|
26
26
|
requirements:
|
27
|
-
- -
|
27
|
+
- - ~>
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version: 0.
|
29
|
+
version: '0.5'
|
30
30
|
- !ruby/object:Gem::Dependency
|
31
31
|
name: mongo
|
32
32
|
requirement: !ruby/object:Gem::Requirement
|
@@ -51,6 +51,11 @@ extra_rdoc_files: []
|
|
51
51
|
files:
|
52
52
|
- lib/synapse-mongo.rb
|
53
53
|
- lib/synapse/mongo/version.rb
|
54
|
+
- lib/synapse/configuration/process_manager/mongo/process_repository.rb
|
55
|
+
- lib/synapse/configuration/process_manager/mongo.rb
|
56
|
+
- lib/synapse/configuration/event_store/mongo/event_store.rb
|
57
|
+
- lib/synapse/configuration/event_store/mongo.rb
|
58
|
+
- lib/synapse/configuration/mongo.rb
|
54
59
|
- lib/synapse/process_manager/mongo/process_repository.rb
|
55
60
|
- lib/synapse/process_manager/mongo/process_document.rb
|
56
61
|
- lib/synapse/process_manager/mongo/template.rb
|
@@ -65,6 +70,8 @@ files:
|
|
65
70
|
- lib/synapse/common/mongo/base_template.rb
|
66
71
|
- lib/synapse/serialization/converter/bson.rb
|
67
72
|
- test/test_helper.rb
|
73
|
+
- test/configuration/mongo/process_manager_test.rb
|
74
|
+
- test/configuration/mongo/event_store_test.rb
|
68
75
|
- test/process_manager/mongo/repository_test.rb
|
69
76
|
- test/event_store/mongo/event_store_test.rb
|
70
77
|
- test/common/mongo/base_template_test.rb
|