sandthorn_driver_sequel 2.1.1 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
- event_data: "new_data"
28
+ event_args: "new_data"
25
29
  },{
26
30
  aggregate_version: 2,
27
31
  event_name: "foo",
28
- event_data: "foo_data"
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
- aggregate = aggregate_access.register_aggregate(aggregate_id, "foo")
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
- expected = {
40
- aggregate_table_id: aggregate.id,
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
- expect { access.record_snapshot("qux", "data") }.to raise_error(Errors::NoAggregateError)
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
- aggregate_table_id = aggregate_access.register_aggregate(aggregate_id, "foo").id
65
+
59
66
  expect(access.find_by_aggregate_id(aggregate_id)).to be_nil
60
- access.record_snapshot(aggregate_id, { aggregate_version: 0, event_data: "data"})
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.aggregate_table_id).to eq(aggregate_table_id)
65
- expect(snapshot.snapshot_data).to eq("data")
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(aggregate_id, { aggregate_version: 0, event_data: "data"})
79
+ access.record_snapshot(snapshot_aggregate)
75
80
  event_access.store_events(aggregate, events)
76
- access.record_snapshot(aggregate_id, { aggregate_version: 2, event_data: "other_data"})
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.aggregate_table_id).to eq(aggregate.id)
81
- expect(snapshot.snapshot_data).to eq("other_data")
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
- snapshot_id = access.record_snapshot(aggregate.aggregate_id, { aggregate_version: 0, event_data: "data" })
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.snapshot_data).to eq("data")
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::EventStore.new url: event_store_url, context: context
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: 2.1.1
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-01-12 00:00:00.000000000 Z
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
- - ".autotest"
235
- - ".gitignore"
236
- - ".rspec"
237
- - ".ruby-gemset"
238
- - ".ruby-version"
239
- - ".travis.yml"
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