sandthorn_driver_sequel 3.2.1 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +2 -4
- data/lib/sandthorn_driver_sequel/access/aggregate_access.rb +0 -4
- data/lib/sandthorn_driver_sequel/access/event_access.rb +11 -15
- data/lib/sandthorn_driver_sequel/errors.rb +0 -14
- data/lib/sandthorn_driver_sequel/event_query.rb +3 -2
- data/lib/sandthorn_driver_sequel/event_store.rb +10 -98
- data/lib/sandthorn_driver_sequel/event_store_context.rb +3 -3
- data/lib/sandthorn_driver_sequel/migration.rb +20 -3
- data/lib/sandthorn_driver_sequel/storage.rb +0 -9
- data/lib/sandthorn_driver_sequel/version.rb +1 -1
- data/lib/sandthorn_driver_sequel/wrappers/event_wrapper.rb +1 -1
- data/lib/sandthorn_driver_sequel/wrappers.rb +0 -1
- data/lib/sandthorn_driver_sequel.rb +0 -26
- data/sandthorn_driver_sequel.gemspec +2 -3
- data/spec/aggregate_access_spec.rb +0 -10
- data/spec/benchmark_spec.rb +6 -35
- data/spec/configuration_spec.rb +0 -29
- data/spec/driver_interface_spec.rb +0 -7
- data/spec/event_access_spec.rb +4 -22
- data/spec/event_store_spec.rb +43 -73
- data/spec/event_store_with_context_spec.rb +5 -5
- data/spec/get_events_spec.rb +12 -47
- data/spec/migration_specifying_domain_spec.rb +6 -6
- data/spec/saving_events_spec.rb +22 -28
- data/spec/storage_spec.rb +1 -0
- metadata +8 -31
- data/lib/sandthorn_driver_sequel/access/snapshot_access.rb +0 -105
- data/lib/sandthorn_driver_sequel/wrappers/snapshot_wrapper.rb +0 -19
- data/spec/asking_for_aggregates_to_snapshot_spec.rb +0 -66
- data/spec/saving_snapshot_spec.rb +0 -69
- data/spec/snapshot_access_spec.rb +0 -110
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 733436ed1a28c227cd7f4af61f0e988d3596d4cc
|
4
|
+
data.tar.gz: 3fb7675715543044914b2490a5322855d4d3163b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1b8bdba85c255968f5c076780ee5f2de0ade21168d91ad3e45c8b2ee965d3c5b1fe14cb23cb3460bf4ee4b3dad2dd0b5ceb1cd59e8223e542e709cfee5e8ede7
|
7
|
+
data.tar.gz: 9850c19545a557071a6bb616d08e2d01fdfd281db913e41d1de1cf4c9ccfe5aa79f31b05a8eae2df3c3f9c86555c13e3fa98ba41d120f674f9cedbb1fa5269e1
|
data/README.md
CHANGED
@@ -22,16 +22,14 @@ Or install it yourself as:
|
|
22
22
|
|
23
23
|
### `SandthornDriverSequel.configure`
|
24
24
|
|
25
|
-
Change the global configuration, the default data serialization for events
|
25
|
+
Change the global configuration, the default data serialization for events are YAML.
|
26
26
|
|
27
|
-
Change the serialization of events
|
27
|
+
Change the serialization of events to Oj.
|
28
28
|
|
29
29
|
```ruby
|
30
30
|
SandthornDriverSequel.configure { |conf|
|
31
31
|
conf.event_serializer = Proc.new { |data| Oj::dump(data) }
|
32
32
|
conf.event_deserializer = Proc.new { |data| Oj::load(data) }
|
33
|
-
conf.snapshot_serializer = Proc.new { |data| Oj::dump(data) }
|
34
|
-
conf.snapshot_deserializer = Proc.new { |data| Oj::dump(data) }
|
35
33
|
}
|
36
34
|
```
|
37
35
|
|
@@ -34,10 +34,6 @@ module SandthornDriverSequel
|
|
34
34
|
aggregate
|
35
35
|
end
|
36
36
|
|
37
|
-
def aggregate_types
|
38
|
-
storage.aggregates.select(:aggregate_type).distinct.select_map(:aggregate_type)
|
39
|
-
end
|
40
|
-
|
41
37
|
# Returns aggregate ids.
|
42
38
|
# @param aggregate_type, optional,
|
43
39
|
def aggregate_ids(aggregate_type: nil)
|
@@ -23,7 +23,7 @@ module SandthornDriverSequel
|
|
23
23
|
def find_events_by_aggregate_id(aggregate_id)
|
24
24
|
aggregate_version = Sequel.qualify(storage.events_table_name, :aggregate_version)
|
25
25
|
wrap(storage.events
|
26
|
-
.join(storage.
|
26
|
+
.join(storage.aggregates_table_name, id: :aggregate_table_id)
|
27
27
|
.where(aggregate_id: aggregate_id)
|
28
28
|
.select(
|
29
29
|
:sequence_number,
|
@@ -32,20 +32,12 @@ module SandthornDriverSequel
|
|
32
32
|
aggregate_version,
|
33
33
|
:event_name,
|
34
34
|
:event_data,
|
35
|
+
:event_metadata,
|
35
36
|
:timestamp)
|
36
37
|
.order(:sequence_number)
|
37
38
|
.all)
|
38
39
|
end
|
39
40
|
|
40
|
-
# Returns events that occurred after the given snapshot
|
41
|
-
def after_snapshot(snapshot)
|
42
|
-
_aggregate_version = snapshot.aggregate_version
|
43
|
-
aggregate_table_id = snapshot.aggregate_table_id
|
44
|
-
wrap(storage.events
|
45
|
-
.where(aggregate_table_id: aggregate_table_id)
|
46
|
-
.where { aggregate_version > _aggregate_version }.all)
|
47
|
-
end
|
48
|
-
|
49
41
|
def get_events(*args)
|
50
42
|
query_builder = EventQuery.new(storage)
|
51
43
|
query_builder.build(*args)
|
@@ -56,16 +48,19 @@ module SandthornDriverSequel
|
|
56
48
|
|
57
49
|
def wrap(arg)
|
58
50
|
events = Utilities.array_wrap(arg)
|
59
|
-
events.each { |e|
|
51
|
+
events.each { |e|
|
52
|
+
e[:event_data] = deserialize(e[:event_data])
|
53
|
+
e[:event_metadata] = deserialize(e[:event_metadata])
|
54
|
+
}
|
60
55
|
events.map { |e| EventWrapper.new(e.values) }
|
61
56
|
end
|
62
57
|
|
63
58
|
def deserialize event_data
|
64
|
-
@deserializer.call(event_data)
|
59
|
+
event_data ? @deserializer.call(event_data) : nil
|
65
60
|
end
|
66
61
|
|
67
|
-
def serialize
|
68
|
-
@serializer.call(
|
62
|
+
def serialize event_data
|
63
|
+
@serializer.call(event_data)
|
69
64
|
end
|
70
65
|
|
71
66
|
def build_event_data(aggregate, timestamp, event)
|
@@ -73,7 +68,8 @@ module SandthornDriverSequel
|
|
73
68
|
aggregate_table_id: aggregate.id,
|
74
69
|
aggregate_version: aggregate.aggregate_version,
|
75
70
|
event_name: event.event_name,
|
76
|
-
event_data: serialize(event.
|
71
|
+
event_data: serialize(event.event_data),
|
72
|
+
event_metadata: serialize(event.event_metadata),
|
77
73
|
timestamp: timestamp
|
78
74
|
}
|
79
75
|
end
|
@@ -32,18 +32,4 @@ module SandthornDriverSequel::Errors
|
|
32
32
|
end
|
33
33
|
end
|
34
34
|
|
35
|
-
class WrongSnapshotVersionError < Error
|
36
|
-
attr_reader :aggregate, :version
|
37
|
-
def initialize(aggregate, version)
|
38
|
-
@aggregate = aggregate
|
39
|
-
@version = version
|
40
|
-
super(create_message)
|
41
|
-
end
|
42
|
-
|
43
|
-
def create_message
|
44
|
-
"#{aggregate[:aggregate_type]} with id #{aggregate[:aggregate_id]}: tried to save snapshot with version "+
|
45
|
-
"#{version}, but current version is at #{aggregate[:aggregate_version]}"
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
35
|
end
|
@@ -48,6 +48,7 @@ module SandthornDriverSequel
|
|
48
48
|
:sequence_number,
|
49
49
|
:event_name,
|
50
50
|
:event_data,
|
51
|
+
:event_metadata,
|
51
52
|
:timestamp
|
52
53
|
]
|
53
54
|
end
|
@@ -58,9 +59,9 @@ module SandthornDriverSequel
|
|
58
59
|
|
59
60
|
def add_aggregate_types(query, aggregate_types)
|
60
61
|
if aggregate_types.any?
|
61
|
-
query.join(storage.
|
62
|
+
query.join(storage.aggregates_table_name, id: :aggregate_table_id, aggregate_type: aggregate_types)
|
62
63
|
else
|
63
|
-
query.join(storage.
|
64
|
+
query.join(storage.aggregates_table_name, id: :aggregate_table_id)
|
64
65
|
end
|
65
66
|
end
|
66
67
|
|
@@ -1,6 +1,5 @@
|
|
1
1
|
require "sandthorn_driver_sequel/access/aggregate_access"
|
2
2
|
require "sandthorn_driver_sequel/access/event_access"
|
3
|
-
require "sandthorn_driver_sequel/access/snapshot_access"
|
4
3
|
require "sandthorn_driver_sequel/storage"
|
5
4
|
|
6
5
|
module SandthornDriverSequel
|
@@ -14,8 +13,6 @@ module SandthornDriverSequel
|
|
14
13
|
@context = context
|
15
14
|
@event_serializer = configuration.event_serializer
|
16
15
|
@event_deserializer = configuration.event_deserializer
|
17
|
-
@snapshot_serializer = configuration.snapshot_serializer
|
18
|
-
@snapshot_deserializer = configuration.snapshot_deserializer
|
19
16
|
end
|
20
17
|
|
21
18
|
def self.from_url url, configuration, context = nil
|
@@ -32,61 +29,33 @@ module SandthornDriverSequel
|
|
32
29
|
end
|
33
30
|
end
|
34
31
|
|
35
|
-
def save_snapshot aggregate
|
36
|
-
driver.execute_in_transaction do |db|
|
37
|
-
snapshot_access = get_snapshot_access(db)
|
38
|
-
snapshot_access.record_snapshot(aggregate)
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
32
|
#get methods
|
43
33
|
def all aggregate_type
|
44
34
|
return get_aggregate_ids(aggregate_type: aggregate_type).map do |id|
|
45
|
-
|
35
|
+
aggregate_events(id)
|
46
36
|
end
|
47
37
|
end
|
48
38
|
|
49
|
-
def find aggregate_id
|
50
|
-
|
39
|
+
def find aggregate_id, aggregate_type
|
40
|
+
aggregate_events(aggregate_id)
|
51
41
|
end
|
52
42
|
|
53
|
-
|
54
|
-
def get_aggregate_events(aggregate_id)
|
43
|
+
def get_events(*args)
|
55
44
|
driver.execute do |db|
|
56
|
-
|
57
|
-
|
45
|
+
event_access = get_event_access(db)
|
46
|
+
event_access.get_events(*args)
|
58
47
|
end
|
59
48
|
end
|
60
49
|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
def get_aggregate_events_from_snapshot(aggregate_id)
|
50
|
+
private
|
51
|
+
|
52
|
+
def aggregate_events(aggregate_id)
|
65
53
|
driver.execute do |db|
|
66
|
-
snapshots = get_snapshot_access(db)
|
67
54
|
event_access = get_event_access(db)
|
68
|
-
|
69
|
-
if snapshot
|
70
|
-
events = event_access.after_snapshot(snapshot)
|
71
|
-
snapshot_event = build_snapshot_event(snapshot)
|
72
|
-
events.unshift(snapshot_event)
|
73
|
-
else
|
74
|
-
event_access.find_events_by_aggregate_id(aggregate_id)
|
75
|
-
end
|
55
|
+
event_access.find_events_by_aggregate_id(aggregate_id)
|
76
56
|
end
|
77
57
|
end
|
78
58
|
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
def get_aggregate aggregate_id, *class_name
|
84
|
-
warn(":get_aggregate is deprecated. Use :get_aggregate_events_from_snapshot")
|
85
|
-
get_aggregate_events_from_snapshot(aggregate_id)
|
86
|
-
end
|
87
|
-
|
88
|
-
|
89
|
-
|
90
59
|
def get_aggregate_ids(aggregate_type: nil)
|
91
60
|
driver.execute do |db|
|
92
61
|
access = get_aggregate_access(db)
|
@@ -94,59 +63,6 @@ module SandthornDriverSequel
|
|
94
63
|
end
|
95
64
|
end
|
96
65
|
|
97
|
-
def get_aggregate_list_by_typename(type)
|
98
|
-
warn(":get_aggregate_list_by_typenames is deprecated. Use :get_aggregate_ids")
|
99
|
-
get_aggregate_ids(aggregate_type: type)
|
100
|
-
end
|
101
|
-
|
102
|
-
def get_all_types
|
103
|
-
driver.execute do |db|
|
104
|
-
access = get_aggregate_access(db)
|
105
|
-
access.aggregate_types
|
106
|
-
end
|
107
|
-
end
|
108
|
-
|
109
|
-
def get_snapshot aggregate_id
|
110
|
-
driver.execute do |db|
|
111
|
-
snapshots = get_snapshot_access(db)
|
112
|
-
snapshot = snapshots.find_by_aggregate_id(aggregate_id)
|
113
|
-
snapshot.data
|
114
|
-
end
|
115
|
-
end
|
116
|
-
|
117
|
-
def get_events(*args)
|
118
|
-
driver.execute do |db|
|
119
|
-
event_access = get_event_access(db)
|
120
|
-
event_access.get_events(*args)
|
121
|
-
end
|
122
|
-
end
|
123
|
-
|
124
|
-
def get_new_events_after_event_id_matching_classname event_id, class_name, take: 0
|
125
|
-
get_events(after_sequence_number: event_id, aggregate_types: Utilities.array_wrap(class_name), take: take)
|
126
|
-
end
|
127
|
-
|
128
|
-
def obsolete_snapshots(*args)
|
129
|
-
driver.execute do |db|
|
130
|
-
snapshots = get_snapshot_access(db)
|
131
|
-
snapshots.obsolete(*args)
|
132
|
-
end
|
133
|
-
end
|
134
|
-
|
135
|
-
private
|
136
|
-
|
137
|
-
def build_snapshot_event(snapshot)
|
138
|
-
{
|
139
|
-
aggregate: snapshot.data,
|
140
|
-
}
|
141
|
-
end
|
142
|
-
|
143
|
-
def transform_snapshot(snapshot)
|
144
|
-
{
|
145
|
-
aggregate_version: snapshot.aggregate_version,
|
146
|
-
event_data: snapshot.snapshot_data
|
147
|
-
}
|
148
|
-
end
|
149
|
-
|
150
66
|
def get_aggregate_access(db)
|
151
67
|
@aggregate_access ||= AggregateAccess.new(storage(db))
|
152
68
|
end
|
@@ -155,10 +71,6 @@ module SandthornDriverSequel
|
|
155
71
|
@event_access ||= EventAccess.new(storage(db), @event_serializer, @event_deserializer)
|
156
72
|
end
|
157
73
|
|
158
|
-
def get_snapshot_access(db)
|
159
|
-
@snapshot_access ||= SnapshotAccess.new(storage(db), @snapshot_serializer, @snapshot_deserializer)
|
160
|
-
end
|
161
|
-
|
162
74
|
def storage(db)
|
163
75
|
@storage ||= Storage.new(db, @context)
|
164
76
|
end
|
@@ -1,15 +1,15 @@
|
|
1
1
|
module SandthornDriverSequel
|
2
2
|
module EventStoreContext
|
3
3
|
attr_reader :context
|
4
|
+
|
4
5
|
def events_table_name
|
5
6
|
with_context_if_exists :events
|
6
7
|
end
|
8
|
+
|
7
9
|
def aggregates_table_name
|
8
10
|
with_context_if_exists :aggregates
|
9
11
|
end
|
10
|
-
|
11
|
-
with_context_if_exists :snapshots
|
12
|
-
end
|
12
|
+
|
13
13
|
def with_context_if_exists name
|
14
14
|
name = "#{context}_#{name}".to_sym if context
|
15
15
|
name
|
@@ -17,7 +17,6 @@ module SandthornDriverSequel
|
|
17
17
|
private
|
18
18
|
def clear_for_test
|
19
19
|
driver.execute do |db|
|
20
|
-
db[snapshots_table_name].truncate
|
21
20
|
db[events_table_name].truncate
|
22
21
|
db[aggregates_table_name].truncate
|
23
22
|
end
|
@@ -77,13 +76,23 @@ module SandthornDriverSequel
|
|
77
76
|
was_migrated events_migration_1, db
|
78
77
|
end
|
79
78
|
end
|
79
|
+
|
80
|
+
events_migration_2 = "#{events_table_name}-20170514"
|
81
|
+
unless has_been_migrated?(events_migration_2)
|
82
|
+
driver.execute_in_transaction do |db|
|
83
|
+
db.alter_table events_table_name do
|
84
|
+
add_column :event_metadata, String, text: true, null: true
|
85
|
+
end
|
86
|
+
was_migrated events_migration_2, db
|
87
|
+
end
|
88
|
+
end
|
80
89
|
end
|
81
90
|
def snapshots
|
82
|
-
snapshot_migration_0 = "#{
|
91
|
+
snapshot_migration_0 = "#{:snapshots}-20130312"
|
83
92
|
unless has_been_migrated?(snapshot_migration_0)
|
84
93
|
driver.execute_in_transaction do |db|
|
85
94
|
aggr_table = aggregates_table_name
|
86
|
-
db.create_table(
|
95
|
+
db.create_table(:snapshots) do
|
87
96
|
primary_key :id
|
88
97
|
Integer :aggregate_version, null: false
|
89
98
|
String :snapshot_data, text: true, null: false
|
@@ -93,6 +102,14 @@ module SandthornDriverSequel
|
|
93
102
|
was_migrated snapshot_migration_0, db
|
94
103
|
end
|
95
104
|
end
|
105
|
+
snapshot_migration_1 = "#{:snapshots}-20170416"
|
106
|
+
unless has_been_migrated?(snapshot_migration_1)
|
107
|
+
driver.execute_in_transaction do |db|
|
108
|
+
db.drop_table?(:snapshots)
|
109
|
+
was_migrated snapshot_migration_1, db
|
110
|
+
end
|
111
|
+
|
112
|
+
end
|
96
113
|
end
|
97
114
|
|
98
115
|
def migration_table_name
|
@@ -25,11 +25,6 @@ module SandthornDriverSequel
|
|
25
25
|
Class.new(Sequel::Model(events_table))
|
26
26
|
end
|
27
27
|
|
28
|
-
# Returns a Sequel::Model for accessing snapshots
|
29
|
-
def snapshots
|
30
|
-
Class.new(Sequel::Model(snapshots_table))
|
31
|
-
end
|
32
|
-
|
33
28
|
def aggregates_table
|
34
29
|
db[aggregates_table_name]
|
35
30
|
end
|
@@ -38,9 +33,5 @@ module SandthornDriverSequel
|
|
38
33
|
db[events_table_name]
|
39
34
|
end
|
40
35
|
|
41
|
-
def snapshots_table
|
42
|
-
db[snapshots_table_name]
|
43
|
-
end
|
44
|
-
|
45
36
|
end
|
46
37
|
end
|
@@ -2,7 +2,7 @@ require 'delegate'
|
|
2
2
|
module SandthornDriverSequel
|
3
3
|
class EventWrapper < SimpleDelegator
|
4
4
|
|
5
|
-
[:aggregate_version, :event_name, :event_data, :
|
5
|
+
[:aggregate_version, :event_name, :event_data, :event_metadata, :timestamp, :aggregate_table_id].each do |attribute|
|
6
6
|
define_method(attribute) do
|
7
7
|
fetch(attribute)
|
8
8
|
end
|
@@ -83,32 +83,6 @@ module SandthornDriverSequel
|
|
83
83
|
-> (data) { YAML.load(data) }
|
84
84
|
end
|
85
85
|
|
86
|
-
#snapshot
|
87
|
-
def snapshot_serializer=(block)
|
88
|
-
@snapshot_serializer = block
|
89
|
-
end
|
90
|
-
|
91
|
-
def snapshot_deserializer=(block)
|
92
|
-
@snapshot_deserializer = block
|
93
|
-
end
|
94
|
-
|
95
|
-
def snapshot_serializer
|
96
|
-
@snapshot_serializer || default_snapshot_serializer
|
97
|
-
end
|
98
|
-
|
99
|
-
def snapshot_deserializer
|
100
|
-
@snapshot_deserializer || default_snapshot_deserializer
|
101
|
-
end
|
102
|
-
|
103
|
-
def default_snapshot_serializer
|
104
|
-
-> (data) { YAML.dump(data) }
|
105
|
-
end
|
106
|
-
|
107
|
-
def default_snapshot_deserializer
|
108
|
-
-> (data) { YAML.load(data) }
|
109
|
-
end
|
110
|
-
|
111
|
-
|
112
86
|
end
|
113
87
|
end
|
114
88
|
end
|
@@ -20,7 +20,7 @@ Gem::Specification.new do |spec|
|
|
20
20
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
21
21
|
spec.require_paths = ["lib"]
|
22
22
|
|
23
|
-
spec.add_development_dependency "bundler"
|
23
|
+
spec.add_development_dependency "bundler"
|
24
24
|
spec.add_development_dependency "rake"
|
25
25
|
|
26
26
|
spec.add_development_dependency "rspec"
|
@@ -32,7 +32,6 @@ Gem::Specification.new do |spec|
|
|
32
32
|
spec.add_development_dependency "autotest-standalone"
|
33
33
|
spec.add_development_dependency "uuidtools"
|
34
34
|
spec.add_development_dependency "ruby-beautify"
|
35
|
-
spec.add_development_dependency "guard-rspec"
|
36
35
|
|
37
|
-
spec.add_runtime_dependency "sequel"
|
36
|
+
spec.add_runtime_dependency "sequel"
|
38
37
|
end
|
@@ -62,16 +62,6 @@ module SandthornDriverSequel
|
|
62
62
|
end
|
63
63
|
end
|
64
64
|
|
65
|
-
describe "#aggregate_types" do
|
66
|
-
it "returns all aggregate types in the event store" do
|
67
|
-
types = ["foo", "bar", "qux"]
|
68
|
-
types.each do |type|
|
69
|
-
access.register_aggregate(generate_uuid, type)
|
70
|
-
end
|
71
|
-
expect(access.aggregate_types).to eq(types.sort)
|
72
|
-
end
|
73
|
-
end
|
74
|
-
|
75
65
|
describe "#aggregate_ids" do
|
76
66
|
context "when given no argument" do
|
77
67
|
it "returns all aggregate ids" do
|
data/spec/benchmark_spec.rb
CHANGED
@@ -10,20 +10,20 @@ module Sandthorn
|
|
10
10
|
before(:each) { prepare_for_test }
|
11
11
|
let(:test_events_20_events) do
|
12
12
|
e = []
|
13
|
-
e << {aggregate_version: 1, event_name: "new",
|
13
|
+
e << {aggregate_version: 1, event_name: "new", event_data: {:attribute_deltas=>[{:attribute_name=>"aggregate_id", :old_value=>nil, :new_value=>"0a74e545-be84-4506-8b0a-73e947856327"}]}}
|
14
14
|
19.times do |i|
|
15
|
-
e << {aggregate_version: i+2, event_name: "foo",
|
15
|
+
e << {aggregate_version: i+2, event_name: "foo", event_data: "A2"}
|
16
16
|
end
|
17
17
|
e
|
18
18
|
end
|
19
19
|
let(:test_events_one_event) do
|
20
20
|
e = []
|
21
|
-
e << {aggregate_version: 1, event_name: "new",
|
21
|
+
e << {aggregate_version: 1, event_name: "new", event_data: "B1" }
|
22
22
|
end
|
23
23
|
let(:test_events_two_events) do
|
24
24
|
e = []
|
25
|
-
e << {aggregate_version: 1, event_name: "new",
|
26
|
-
e << {aggregate_version: 2, event_name: "foo",
|
25
|
+
e << {aggregate_version: 1, event_name: "new", event_data: {:attribute_deltas=>[{:attribute_name=>"aggregate_id", :old_value=>nil, :new_value=>"0a74e545-be84-4506-8b0a-73e947856327"}]}}
|
26
|
+
e << {aggregate_version: 2, event_name: "foo", event_data: "A2"}
|
27
27
|
end
|
28
28
|
let(:aggregate_id) {"c0456e26-2345-4f67-92fa-130b3a31a39a"}
|
29
29
|
let(:es) { event_store }
|
@@ -72,36 +72,7 @@ module Sandthorn
|
|
72
72
|
end
|
73
73
|
|
74
74
|
end
|
75
|
-
|
76
|
-
|
77
|
-
it "should find one event that is snapshoted 500 times" do
|
78
|
-
snapshot_data = { event_data: YAML.dump(Object.new), aggregate_version: 1 }
|
79
|
-
es.save_events(test_events_one_event, 0, aggregate_id, SandthornDriverSequel::EventStore)
|
80
|
-
es.save_snapshot(snapshot_data, aggregate_id, SandthornDriverSequel::EventStore)
|
81
|
-
|
82
|
-
Benchmark.bm do |x|
|
83
|
-
x.report("find") { for i in 1..n; es.get_aggregate(aggregate_id, SandthornDriverSequel::EventStore); end }
|
84
|
-
end
|
85
|
-
end
|
86
|
-
it "should find two events that is snapshoted 500 times" do
|
87
|
-
snapshot_data = { event_data: YAML.dump(Object.new), aggregate_version: 2 }
|
88
|
-
es.save_events(test_events_two_events, 0, aggregate_id, SandthornDriverSequel::EventStore)
|
89
|
-
es.save_snapshot(snapshot_data, aggregate_id, SandthornDriverSequel::EventStore)
|
90
|
-
Benchmark.bm do |x|
|
91
|
-
x.report("find") { for i in 1..n; es.get_aggregate(aggregate_id, SandthornDriverSequel::EventStore); end }
|
92
|
-
end
|
93
|
-
end
|
94
|
-
it "should find twenty events that is snapshoted 500 times" do
|
95
|
-
snapshot_data = { event_data: YAML.dump(Object.new), aggregate_version: 19 }
|
96
|
-
es.save_events(test_events_20_events, 0, aggregate_id, SandthornDriverSequel::EventStore)
|
97
|
-
es.save_snapshot(snapshot_data, aggregate_id, SandthornDriverSequel::EventStore)
|
98
|
-
|
99
|
-
Benchmark.bm do |x|
|
100
|
-
x.report("find") { for i in 1..n; es.get_aggregate(aggregate_id, SandthornDriverSequel::EventStore); end }
|
101
|
-
end
|
102
|
-
end
|
103
|
-
|
104
|
-
end
|
75
|
+
|
105
76
|
# it "new save and find 500 aggregates" do
|
106
77
|
|
107
78
|
# Benchmark.bm do |x|
|
data/spec/configuration_spec.rb
CHANGED
@@ -19,21 +19,11 @@ module SandthornDriverSequel
|
|
19
19
|
expect(driver.instance_variable_get "@event_deserializer".to_sym).to be_a Proc
|
20
20
|
end
|
21
21
|
|
22
|
-
it "should have the default snapshot_serializer" do
|
23
|
-
expect(driver.instance_variable_get "@snapshot_serializer".to_sym).to be_a Proc
|
24
|
-
end
|
25
|
-
|
26
|
-
it "should have the default snapshot_deserializer" do
|
27
|
-
expect(driver.instance_variable_get "@snapshot_deserializer".to_sym).to be_a Proc
|
28
|
-
end
|
29
|
-
|
30
22
|
context "change global configuration" do
|
31
23
|
before do
|
32
24
|
SandthornDriverSequel.configure { |conf|
|
33
25
|
conf.event_serializer = :serializer_event_global
|
34
26
|
conf.event_deserializer = :deserializer_event_global
|
35
|
-
conf.snapshot_serializer = :serializer_snapshot_global
|
36
|
-
conf.snapshot_deserializer = :deserializer_snapshot_global
|
37
27
|
}
|
38
28
|
end
|
39
29
|
|
@@ -42,8 +32,6 @@ module SandthornDriverSequel
|
|
42
32
|
SandthornDriverSequel.configure { |conf|
|
43
33
|
conf.event_serializer = -> (data) { YAML.dump(data) }
|
44
34
|
conf.event_deserializer = -> (data) { YAML.load(data) }
|
45
|
-
conf.snapshot_serializer = -> (data) { YAML.dump(data) }
|
46
|
-
conf.snapshot_deserializer = -> (data) { YAML.load(data) }
|
47
35
|
}
|
48
36
|
end
|
49
37
|
|
@@ -55,13 +43,6 @@ module SandthornDriverSequel
|
|
55
43
|
expect(driver.instance_variable_get "@event_deserializer".to_sym).to eql :deserializer_event_global
|
56
44
|
end
|
57
45
|
|
58
|
-
it "should have the new snapshot_serializer" do
|
59
|
-
expect(driver.instance_variable_get "@snapshot_serializer".to_sym).to eql :serializer_snapshot_global
|
60
|
-
end
|
61
|
-
|
62
|
-
it "should have the default snapshot_deserializer" do
|
63
|
-
expect(driver.instance_variable_get "@snapshot_deserializer".to_sym).to eql :deserializer_snapshot_global
|
64
|
-
end
|
65
46
|
end
|
66
47
|
end
|
67
48
|
|
@@ -70,8 +51,6 @@ module SandthornDriverSequel
|
|
70
51
|
SandthornDriverSequel.driver_from_connection(connection: Sequel.sqlite) { |conf|
|
71
52
|
conf.event_serializer = :event_serializer
|
72
53
|
conf.event_deserializer = :event_deserializer
|
73
|
-
conf.snapshot_serializer = :snapshot_serializer
|
74
|
-
conf.snapshot_deserializer = :snapshot_deserializer
|
75
54
|
}
|
76
55
|
end
|
77
56
|
|
@@ -87,14 +66,6 @@ module SandthornDriverSequel
|
|
87
66
|
expect(driver.instance_variable_get "@event_deserializer".to_sym).to eql :event_deserializer
|
88
67
|
end
|
89
68
|
|
90
|
-
it "should have a configuration snapshot_serializer" do
|
91
|
-
expect(driver.instance_variable_get "@snapshot_serializer".to_sym).to eql :snapshot_serializer
|
92
|
-
end
|
93
|
-
|
94
|
-
it "should have a configuration snapshot_deserializer" do
|
95
|
-
expect(driver.instance_variable_get "@snapshot_deserializer".to_sym).to eql :snapshot_deserializer
|
96
|
-
end
|
97
|
-
|
98
69
|
end
|
99
70
|
|
100
71
|
|
@@ -7,13 +7,6 @@ module SandthornDriverSequel
|
|
7
7
|
let(:subject) { event_store }
|
8
8
|
methods = [
|
9
9
|
:save_events,
|
10
|
-
:save_snapshot,
|
11
|
-
:get_aggregate_events_from_snapshot,
|
12
|
-
:get_aggregate,
|
13
|
-
:get_aggregate_events,
|
14
|
-
:get_aggregate_ids,
|
15
|
-
:get_all_types,
|
16
|
-
:get_snapshot,
|
17
10
|
:get_events,
|
18
11
|
:context,
|
19
12
|
:driver,
|