sandthorn_driver_sequel 2.1.1 → 3.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/.ruby-version +1 -1
- data/.travis.yml +2 -1
- data/README.md +30 -1
- data/lib/sandthorn_driver_sequel/access/aggregate_access.rb +2 -0
- data/lib/sandthorn_driver_sequel/access/event_access.rb +22 -5
- data/lib/sandthorn_driver_sequel/access/snapshot_access.rb +58 -40
- data/lib/sandthorn_driver_sequel/access.rb +0 -4
- data/lib/sandthorn_driver_sequel/event_store.rb +24 -14
- data/lib/sandthorn_driver_sequel/migration.rb +3 -2
- data/lib/sandthorn_driver_sequel/sequel_driver.rb +4 -3
- 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/snapshot_wrapper.rb +10 -2
- data/lib/sandthorn_driver_sequel.rb +89 -5
- data/sandthorn_driver_sequel.gemspec +0 -2
- data/spec/asking_for_aggregates_to_snapshot_spec.rb +8 -6
- data/spec/benchmark_spec.rb +5 -5
- data/spec/configuration_spec.rb +102 -0
- data/spec/driver_interface_spec.rb +0 -1
- data/spec/event_access_spec.rb +15 -8
- data/spec/event_store_with_context_spec.rb +5 -5
- data/spec/get_events_spec.rb +8 -8
- data/spec/saving_events_spec.rb +13 -30
- data/spec/saving_snapshot_spec.rb +12 -20
- data/spec/snapshot_access_spec.rb +35 -44
- data/spec/spec_helper.rb +5 -2
- metadata +38 -64
@@ -12,104 +12,95 @@ module SandthornDriverSequel
|
|
12
12
|
let(:db) { Sequel.connect(event_store_url)}
|
13
13
|
let(:aggregate_id) { generate_uuid }
|
14
14
|
let(:storage) { Storage.new(db, :test) }
|
15
|
+
let(:event_serializer) { -> (data) { YAML.dump(data) } }
|
16
|
+
let(:event_deserializer) { -> (data) { YAML.load(data) } }
|
17
|
+
let(:snapshot_serializer) { -> (data) { YAML.dump(data) } }
|
18
|
+
let(:snapshot_deserializer) { -> (data) { YAML.load(data) } }
|
15
19
|
let(:aggregate_access) { AggregateAccess.new(storage) }
|
16
|
-
let(:event_access) { EventAccess.new(storage) }
|
20
|
+
let(:event_access) { EventAccess.new(storage, event_serializer, event_deserializer) }
|
17
21
|
let(:aggregate) { aggregate_access.register_aggregate(aggregate_id, "foo") }
|
18
|
-
let(:access) { SnapshotAccess.new(storage) }
|
22
|
+
let(:access) { SnapshotAccess.new(storage, snapshot_serializer, snapshot_deserializer) }
|
19
23
|
let(:events) do
|
20
24
|
[
|
21
25
|
{
|
22
26
|
aggregate_version: 1,
|
23
27
|
event_name: "new",
|
24
|
-
|
28
|
+
event_args: "new_data"
|
25
29
|
},{
|
26
30
|
aggregate_version: 2,
|
27
31
|
event_name: "foo",
|
28
|
-
|
32
|
+
event_args: "foo_data"
|
29
33
|
}
|
30
34
|
]
|
31
35
|
end
|
36
|
+
let(:snapshot_aggregate) {
|
37
|
+
aggregate #register the aggregate
|
38
|
+
Struct::AggregateMock.new aggregate_id, 0
|
39
|
+
}
|
40
|
+
|
41
|
+
let(:snapshot_aggregate_2) {
|
42
|
+
Struct::AggregateMock.new aggregate_id, 2
|
43
|
+
}
|
32
44
|
|
33
45
|
describe "#find_by_aggregate_id" do
|
34
46
|
it "returns the correct data" do
|
35
|
-
|
36
|
-
access.record_snapshot(aggregate.aggregate_id, { aggregate_version: 0, event_data: "data" })
|
47
|
+
access.record_snapshot(snapshot_aggregate)
|
37
48
|
aggregate.update(aggregate_version: 1)
|
38
49
|
snapshot = access.find_by_aggregate_id(aggregate.aggregate_id)
|
39
|
-
|
40
|
-
|
41
|
-
aggregate_version: 0,
|
42
|
-
snapshot_data: "data",
|
43
|
-
id: snapshot.id
|
44
|
-
}
|
45
|
-
expect(snapshot.values).to eq(expected)
|
50
|
+
expect(snapshot.data).to eql snapshot_aggregate
|
51
|
+
|
46
52
|
end
|
47
53
|
end
|
48
54
|
|
49
55
|
describe "#record" do
|
50
56
|
context "when the aggregate doesn't exist" do
|
51
57
|
it "raises an error" do
|
52
|
-
|
58
|
+
agg = Struct::AggregateMock.new "qux", 1
|
59
|
+
expect { access.record_snapshot(agg) }.to raise_error(Errors::NoAggregateError)
|
53
60
|
end
|
54
61
|
end
|
55
62
|
context "when the aggregate exists" do
|
56
63
|
context "when no previous snapshot exists" do
|
57
64
|
it "records the snapshot" do
|
58
|
-
|
65
|
+
|
59
66
|
expect(access.find_by_aggregate_id(aggregate_id)).to be_nil
|
60
|
-
access.record_snapshot(
|
67
|
+
access.record_snapshot(snapshot_aggregate)
|
61
68
|
|
62
69
|
snapshot = access.find_by_aggregate_id(aggregate_id)
|
63
70
|
expect(snapshot).to_not be_nil
|
64
|
-
expect(snapshot.
|
65
|
-
expect(snapshot.
|
66
|
-
expect(snapshot.aggregate_version).to eq(0)
|
71
|
+
expect(snapshot.data).to eq(snapshot_aggregate)
|
72
|
+
expect(snapshot.data.aggregate_version).to eq(0)
|
67
73
|
end
|
68
74
|
end
|
69
75
|
context "when the snapshot isn't fresh" do
|
70
76
|
context "when the versions match" do
|
71
77
|
it "records a new snapshot" do
|
72
|
-
aggregate = aggregate_access.register_aggregate(aggregate_id, "foo")
|
73
78
|
expect(access.find_by_aggregate_id(aggregate_id)).to be_nil
|
74
|
-
access.record_snapshot(
|
79
|
+
access.record_snapshot(snapshot_aggregate)
|
75
80
|
event_access.store_events(aggregate, events)
|
76
|
-
access.record_snapshot(
|
81
|
+
access.record_snapshot(snapshot_aggregate_2)
|
77
82
|
|
78
83
|
snapshot = access.find_by_aggregate_id(aggregate_id)
|
79
84
|
expect(snapshot).to_not be_nil
|
80
|
-
expect(snapshot.
|
81
|
-
expect(snapshot.
|
82
|
-
expect(snapshot.aggregate_version).to eq(2)
|
85
|
+
expect(snapshot.data).to eq(snapshot_aggregate_2)
|
86
|
+
expect(snapshot.data.aggregate_version).to eq(2)
|
83
87
|
end
|
84
88
|
end
|
85
89
|
|
86
|
-
context "when the versions don't match" do
|
87
|
-
it "raises an error" do
|
88
|
-
aggregate = aggregate_access.register_aggregate(aggregate_id, "foo")
|
89
|
-
aggregate.update(aggregate_version: 10)
|
90
|
-
expect { access.record_snapshot(aggregate_id, snapshot_data) }.to raise_error
|
91
|
-
end
|
92
|
-
end
|
93
|
-
end
|
94
|
-
context "when the snapshot is fresh" do
|
95
|
-
it "doesn't record a snapshot" do
|
96
|
-
aggregate = aggregate_access.register_aggregate(aggregate_id, "foo")
|
97
|
-
expect(access.find_by_aggregate_id(aggregate_id)).to be_nil
|
98
|
-
access.record_snapshot(aggregate_id, { aggregate_version: 0, event_data: "data"})
|
99
|
-
access.record_snapshot(aggregate_id, { aggregate_version: 0, event_data: "new_data"})
|
100
|
-
snapshot = access.find_by_aggregate_id(aggregate_id)
|
101
|
-
expect(snapshot.snapshot_data).to eq("data")
|
102
|
-
end
|
103
90
|
end
|
91
|
+
|
104
92
|
end
|
105
93
|
end
|
106
94
|
|
107
95
|
it "can write and read snapshots" do
|
108
|
-
|
96
|
+
|
97
|
+
snapshot_id = access.record_snapshot(snapshot_aggregate)
|
109
98
|
snapshot = access.find(snapshot_id)
|
99
|
+
|
110
100
|
expect(snapshot).to_not be_nil
|
111
|
-
expect(snapshot.
|
101
|
+
expect(snapshot.data).to eq(snapshot_aggregate)
|
112
102
|
expect(snapshot)
|
103
|
+
|
113
104
|
end
|
114
105
|
|
115
106
|
def generate_uuid
|
data/spec/spec_helper.rb
CHANGED
@@ -14,6 +14,10 @@ RSpec.configure do |config|
|
|
14
14
|
config.filter_run :focus
|
15
15
|
config.filter_run_excluding benchmark: true
|
16
16
|
config.order = 'random'
|
17
|
+
# config.before(:each) do
|
18
|
+
# prepare_for_test
|
19
|
+
# end
|
20
|
+
Struct.new("AggregateMock", :aggregate_id, :aggregate_version)
|
17
21
|
end
|
18
22
|
def prepare_for_test context: :test
|
19
23
|
migrator = SandthornDriverSequel::Migration.new url: event_store_url, context: context
|
@@ -23,9 +27,8 @@ end
|
|
23
27
|
|
24
28
|
def event_store_url
|
25
29
|
"sqlite://spec/db/event_store.sqlite3"
|
26
|
-
#"postgres://morganhallgren@localhost:5432/test_1"
|
27
30
|
end
|
28
31
|
|
29
32
|
def event_store context: :test
|
30
|
-
SandthornDriverSequel
|
33
|
+
SandthornDriverSequel.driver_from_url url: event_store_url, context: context
|
31
34
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sandthorn_driver_sequel
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lars Krantz
|
@@ -10,216 +10,188 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2016-
|
13
|
+
date: 2016-02-11 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: bundler
|
17
17
|
requirement: !ruby/object:Gem::Requirement
|
18
18
|
requirements:
|
19
|
-
- -
|
19
|
+
- - ~>
|
20
20
|
- !ruby/object:Gem::Version
|
21
21
|
version: '1.3'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
25
|
requirements:
|
26
|
-
- -
|
26
|
+
- - ~>
|
27
27
|
- !ruby/object:Gem::Version
|
28
28
|
version: '1.3'
|
29
29
|
- !ruby/object:Gem::Dependency
|
30
30
|
name: rake
|
31
31
|
requirement: !ruby/object:Gem::Requirement
|
32
32
|
requirements:
|
33
|
-
- -
|
33
|
+
- - '>='
|
34
34
|
- !ruby/object:Gem::Version
|
35
35
|
version: '0'
|
36
36
|
type: :development
|
37
37
|
prerelease: false
|
38
38
|
version_requirements: !ruby/object:Gem::Requirement
|
39
39
|
requirements:
|
40
|
-
- -
|
40
|
+
- - '>='
|
41
41
|
- !ruby/object:Gem::Version
|
42
42
|
version: '0'
|
43
43
|
- !ruby/object:Gem::Dependency
|
44
44
|
name: rspec
|
45
45
|
requirement: !ruby/object:Gem::Requirement
|
46
46
|
requirements:
|
47
|
-
- -
|
47
|
+
- - '>='
|
48
48
|
- !ruby/object:Gem::Version
|
49
49
|
version: '0'
|
50
50
|
type: :development
|
51
51
|
prerelease: false
|
52
52
|
version_requirements: !ruby/object:Gem::Requirement
|
53
53
|
requirements:
|
54
|
-
- -
|
54
|
+
- - '>='
|
55
55
|
- !ruby/object:Gem::Version
|
56
56
|
version: '0'
|
57
57
|
- !ruby/object:Gem::Dependency
|
58
58
|
name: gem-release
|
59
59
|
requirement: !ruby/object:Gem::Requirement
|
60
60
|
requirements:
|
61
|
-
- -
|
61
|
+
- - '>='
|
62
62
|
- !ruby/object:Gem::Version
|
63
63
|
version: '0'
|
64
64
|
type: :development
|
65
65
|
prerelease: false
|
66
66
|
version_requirements: !ruby/object:Gem::Requirement
|
67
67
|
requirements:
|
68
|
-
- -
|
68
|
+
- - '>='
|
69
69
|
- !ruby/object:Gem::Version
|
70
70
|
version: '0'
|
71
71
|
- !ruby/object:Gem::Dependency
|
72
72
|
name: sqlite3
|
73
73
|
requirement: !ruby/object:Gem::Requirement
|
74
74
|
requirements:
|
75
|
-
- -
|
75
|
+
- - '>='
|
76
76
|
- !ruby/object:Gem::Version
|
77
77
|
version: '0'
|
78
78
|
type: :development
|
79
79
|
prerelease: false
|
80
80
|
version_requirements: !ruby/object:Gem::Requirement
|
81
81
|
requirements:
|
82
|
-
- -
|
82
|
+
- - '>='
|
83
83
|
- !ruby/object:Gem::Version
|
84
84
|
version: '0'
|
85
85
|
- !ruby/object:Gem::Dependency
|
86
86
|
name: pry
|
87
87
|
requirement: !ruby/object:Gem::Requirement
|
88
88
|
requirements:
|
89
|
-
- -
|
89
|
+
- - '>='
|
90
90
|
- !ruby/object:Gem::Version
|
91
91
|
version: '0'
|
92
92
|
type: :development
|
93
93
|
prerelease: false
|
94
94
|
version_requirements: !ruby/object:Gem::Requirement
|
95
95
|
requirements:
|
96
|
-
- -
|
96
|
+
- - '>='
|
97
97
|
- !ruby/object:Gem::Version
|
98
98
|
version: '0'
|
99
99
|
- !ruby/object:Gem::Dependency
|
100
100
|
name: pry-doc
|
101
101
|
requirement: !ruby/object:Gem::Requirement
|
102
102
|
requirements:
|
103
|
-
- -
|
103
|
+
- - '>='
|
104
104
|
- !ruby/object:Gem::Version
|
105
105
|
version: '0'
|
106
106
|
type: :development
|
107
107
|
prerelease: false
|
108
108
|
version_requirements: !ruby/object:Gem::Requirement
|
109
109
|
requirements:
|
110
|
-
- -
|
110
|
+
- - '>='
|
111
111
|
- !ruby/object:Gem::Version
|
112
112
|
version: '0'
|
113
113
|
- !ruby/object:Gem::Dependency
|
114
114
|
name: awesome_print
|
115
115
|
requirement: !ruby/object:Gem::Requirement
|
116
116
|
requirements:
|
117
|
-
- -
|
117
|
+
- - '>='
|
118
118
|
- !ruby/object:Gem::Version
|
119
119
|
version: '0'
|
120
120
|
type: :development
|
121
121
|
prerelease: false
|
122
122
|
version_requirements: !ruby/object:Gem::Requirement
|
123
123
|
requirements:
|
124
|
-
- -
|
124
|
+
- - '>='
|
125
125
|
- !ruby/object:Gem::Version
|
126
126
|
version: '0'
|
127
127
|
- !ruby/object:Gem::Dependency
|
128
128
|
name: autotest-standalone
|
129
129
|
requirement: !ruby/object:Gem::Requirement
|
130
130
|
requirements:
|
131
|
-
- -
|
131
|
+
- - '>='
|
132
132
|
- !ruby/object:Gem::Version
|
133
133
|
version: '0'
|
134
134
|
type: :development
|
135
135
|
prerelease: false
|
136
136
|
version_requirements: !ruby/object:Gem::Requirement
|
137
137
|
requirements:
|
138
|
-
- -
|
138
|
+
- - '>='
|
139
139
|
- !ruby/object:Gem::Version
|
140
140
|
version: '0'
|
141
141
|
- !ruby/object:Gem::Dependency
|
142
142
|
name: uuidtools
|
143
143
|
requirement: !ruby/object:Gem::Requirement
|
144
144
|
requirements:
|
145
|
-
- -
|
145
|
+
- - '>='
|
146
146
|
- !ruby/object:Gem::Version
|
147
147
|
version: '0'
|
148
148
|
type: :development
|
149
149
|
prerelease: false
|
150
150
|
version_requirements: !ruby/object:Gem::Requirement
|
151
151
|
requirements:
|
152
|
-
- -
|
152
|
+
- - '>='
|
153
153
|
- !ruby/object:Gem::Version
|
154
154
|
version: '0'
|
155
155
|
- !ruby/object:Gem::Dependency
|
156
156
|
name: ruby-beautify
|
157
157
|
requirement: !ruby/object:Gem::Requirement
|
158
158
|
requirements:
|
159
|
-
- -
|
159
|
+
- - '>='
|
160
160
|
- !ruby/object:Gem::Version
|
161
161
|
version: '0'
|
162
162
|
type: :development
|
163
163
|
prerelease: false
|
164
164
|
version_requirements: !ruby/object:Gem::Requirement
|
165
165
|
requirements:
|
166
|
-
- -
|
167
|
-
- !ruby/object:Gem::Version
|
168
|
-
version: '0'
|
169
|
-
- !ruby/object:Gem::Dependency
|
170
|
-
name: msgpack
|
171
|
-
requirement: !ruby/object:Gem::Requirement
|
172
|
-
requirements:
|
173
|
-
- - ">="
|
174
|
-
- !ruby/object:Gem::Version
|
175
|
-
version: '0'
|
176
|
-
type: :development
|
177
|
-
prerelease: false
|
178
|
-
version_requirements: !ruby/object:Gem::Requirement
|
179
|
-
requirements:
|
180
|
-
- - ">="
|
181
|
-
- !ruby/object:Gem::Version
|
182
|
-
version: '0'
|
183
|
-
- !ruby/object:Gem::Dependency
|
184
|
-
name: snappy
|
185
|
-
requirement: !ruby/object:Gem::Requirement
|
186
|
-
requirements:
|
187
|
-
- - ">="
|
188
|
-
- !ruby/object:Gem::Version
|
189
|
-
version: '0'
|
190
|
-
type: :development
|
191
|
-
prerelease: false
|
192
|
-
version_requirements: !ruby/object:Gem::Requirement
|
193
|
-
requirements:
|
194
|
-
- - ">="
|
166
|
+
- - '>='
|
195
167
|
- !ruby/object:Gem::Version
|
196
168
|
version: '0'
|
197
169
|
- !ruby/object:Gem::Dependency
|
198
170
|
name: guard-rspec
|
199
171
|
requirement: !ruby/object:Gem::Requirement
|
200
172
|
requirements:
|
201
|
-
- -
|
173
|
+
- - '>='
|
202
174
|
- !ruby/object:Gem::Version
|
203
175
|
version: '0'
|
204
176
|
type: :development
|
205
177
|
prerelease: false
|
206
178
|
version_requirements: !ruby/object:Gem::Requirement
|
207
179
|
requirements:
|
208
|
-
- -
|
180
|
+
- - '>='
|
209
181
|
- !ruby/object:Gem::Version
|
210
182
|
version: '0'
|
211
183
|
- !ruby/object:Gem::Dependency
|
212
184
|
name: sequel
|
213
185
|
requirement: !ruby/object:Gem::Requirement
|
214
186
|
requirements:
|
215
|
-
- -
|
187
|
+
- - ~>
|
216
188
|
- !ruby/object:Gem::Version
|
217
189
|
version: '4.17'
|
218
190
|
type: :runtime
|
219
191
|
prerelease: false
|
220
192
|
version_requirements: !ruby/object:Gem::Requirement
|
221
193
|
requirements:
|
222
|
-
- -
|
194
|
+
- - ~>
|
223
195
|
- !ruby/object:Gem::Version
|
224
196
|
version: '4.17'
|
225
197
|
description: Sequel driver for Sandthorn
|
@@ -231,12 +203,12 @@ executables: []
|
|
231
203
|
extensions: []
|
232
204
|
extra_rdoc_files: []
|
233
205
|
files:
|
234
|
-
-
|
235
|
-
-
|
236
|
-
-
|
237
|
-
-
|
238
|
-
-
|
239
|
-
-
|
206
|
+
- .autotest
|
207
|
+
- .gitignore
|
208
|
+
- .rspec
|
209
|
+
- .ruby-gemset
|
210
|
+
- .ruby-version
|
211
|
+
- .travis.yml
|
240
212
|
- Gemfile
|
241
213
|
- Guardfile
|
242
214
|
- LICENSE.txt
|
@@ -264,6 +236,7 @@ files:
|
|
264
236
|
- spec/aggregate_access_spec.rb
|
265
237
|
- spec/asking_for_aggregates_to_snapshot_spec.rb
|
266
238
|
- spec/benchmark_spec.rb
|
239
|
+
- spec/configuration_spec.rb
|
267
240
|
- spec/db/.keep
|
268
241
|
- spec/driver_interface_spec.rb
|
269
242
|
- spec/event_access_spec.rb
|
@@ -285,12 +258,12 @@ require_paths:
|
|
285
258
|
- lib
|
286
259
|
required_ruby_version: !ruby/object:Gem::Requirement
|
287
260
|
requirements:
|
288
|
-
- -
|
261
|
+
- - '>='
|
289
262
|
- !ruby/object:Gem::Version
|
290
263
|
version: '2.0'
|
291
264
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
292
265
|
requirements:
|
293
|
-
- -
|
266
|
+
- - '>='
|
294
267
|
- !ruby/object:Gem::Version
|
295
268
|
version: '0'
|
296
269
|
requirements: []
|
@@ -303,6 +276,7 @@ test_files:
|
|
303
276
|
- spec/aggregate_access_spec.rb
|
304
277
|
- spec/asking_for_aggregates_to_snapshot_spec.rb
|
305
278
|
- spec/benchmark_spec.rb
|
279
|
+
- spec/configuration_spec.rb
|
306
280
|
- spec/db/.keep
|
307
281
|
- spec/driver_interface_spec.rb
|
308
282
|
- spec/event_access_spec.rb
|