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.
@@ -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