ruby_event_store 2.3.0 → 2.4.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.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/lib/ruby_event_store/batch_enumerator.rb +3 -3
  3. data/lib/ruby_event_store/broker.rb +5 -4
  4. data/lib/ruby_event_store/client.rb +47 -45
  5. data/lib/ruby_event_store/composed_dispatcher.rb +1 -3
  6. data/lib/ruby_event_store/correlated_commands.rb +4 -15
  7. data/lib/ruby_event_store/errors.rb +11 -11
  8. data/lib/ruby_event_store/event.rb +6 -14
  9. data/lib/ruby_event_store/expected_version.rb +3 -7
  10. data/lib/ruby_event_store/in_memory_repository.rb +42 -31
  11. data/lib/ruby_event_store/instrumented_dispatcher.rb +3 -4
  12. data/lib/ruby_event_store/instrumented_repository.rb +3 -4
  13. data/lib/ruby_event_store/link_by_metadata.rb +4 -21
  14. data/lib/ruby_event_store/mappers/default.rb +6 -4
  15. data/lib/ruby_event_store/mappers/encryption_key.rb +7 -16
  16. data/lib/ruby_event_store/mappers/encryption_mapper.rb +6 -6
  17. data/lib/ruby_event_store/mappers/null_mapper.rb +0 -1
  18. data/lib/ruby_event_store/mappers/pipeline.rb +3 -10
  19. data/lib/ruby_event_store/mappers/pipeline_mapper.rb +1 -0
  20. data/lib/ruby_event_store/mappers/transformation/domain_event.rb +21 -21
  21. data/lib/ruby_event_store/mappers/transformation/encryption.rb +21 -25
  22. data/lib/ruby_event_store/mappers/transformation/event_class_remapper.rb +6 -5
  23. data/lib/ruby_event_store/mappers/transformation/stringify_metadata_keys.rb +6 -5
  24. data/lib/ruby_event_store/mappers/transformation/symbolize_metadata_keys.rb +6 -5
  25. data/lib/ruby_event_store/mappers/transformation/upcast.rb +2 -6
  26. data/lib/ruby_event_store/metadata.rb +43 -14
  27. data/lib/ruby_event_store/projection.rb +10 -18
  28. data/lib/ruby_event_store/record.rb +14 -26
  29. data/lib/ruby_event_store/serialized_record.rb +14 -26
  30. data/lib/ruby_event_store/serializers/yaml.rb +17 -0
  31. data/lib/ruby_event_store/spec/broker_lint.rb +27 -17
  32. data/lib/ruby_event_store/spec/event_lint.rb +1 -1
  33. data/lib/ruby_event_store/spec/event_repository_lint.rb +513 -556
  34. data/lib/ruby_event_store/spec/mapper_lint.rb +2 -2
  35. data/lib/ruby_event_store/spec/subscriptions_lint.rb +23 -22
  36. data/lib/ruby_event_store/specification.rb +20 -16
  37. data/lib/ruby_event_store/specification_reader.rb +2 -3
  38. data/lib/ruby_event_store/specification_result.rb +52 -46
  39. data/lib/ruby_event_store/stream.rb +3 -7
  40. data/lib/ruby_event_store/subscriptions.rb +13 -14
  41. data/lib/ruby_event_store/transform_keys.rb +1 -1
  42. data/lib/ruby_event_store/version.rb +1 -1
  43. data/lib/ruby_event_store.rb +1 -0
  44. metadata +6 -18
@@ -2,52 +2,55 @@ module RubyEventStore
2
2
  # @private
3
3
  class SRecord
4
4
  def self.new(
5
- event_id: SecureRandom.uuid,
6
- data: {},
7
- metadata: {},
5
+ event_id: SecureRandom.uuid,
6
+ data: {},
7
+ metadata: {},
8
8
  event_type: "SRecordTestEvent",
9
- timestamp: Time.new.utc,
10
- valid_at: nil
9
+ timestamp: Time.new.utc,
10
+ valid_at: nil
11
11
  )
12
12
  Record.new(
13
- event_id: event_id,
14
- data: data,
15
- metadata: metadata,
13
+ event_id: event_id,
14
+ data: data,
15
+ metadata: metadata,
16
16
  event_type: event_type,
17
- timestamp: timestamp.round(TIMESTAMP_PRECISION),
18
- valid_at: (valid_at || timestamp).round(TIMESTAMP_PRECISION),
17
+ timestamp: timestamp.round(TIMESTAMP_PRECISION),
18
+ valid_at: (valid_at || timestamp).round(TIMESTAMP_PRECISION)
19
19
  )
20
20
  end
21
21
  end
22
22
 
23
23
  # @private
24
24
  Type1 = Class.new(RubyEventStore::Event)
25
+
25
26
  # @private
26
27
  Type2 = Class.new(RubyEventStore::Event)
28
+
27
29
  # @private
28
30
  Type3 = Class.new(RubyEventStore::Event)
29
31
  end
30
32
 
31
33
  module RubyEventStore
32
34
  ::RSpec.shared_examples :event_repository do |mk_repository, helper|
33
- let(:repository) { mk_repository.call }
35
+ let(:repository) { mk_repository.call }
34
36
  let(:specification) { Specification.new(SpecificationReader.new(repository, Mappers::NullMapper.new)) }
35
37
  let(:global_stream) { Stream.new(GLOBAL_STREAM) }
36
- let(:stream) { Stream.new(SecureRandom.uuid) }
37
- let(:stream_flow) { Stream.new("flow") }
38
- let(:stream_other) { Stream.new("other") }
39
- let(:stream_test) { Stream.new("test") }
40
- let(:version_none) { ExpectedVersion.none }
41
- let(:version_auto) { ExpectedVersion.auto }
42
- let(:version_any) { ExpectedVersion.any }
43
- let(:version_0) { ExpectedVersion.new(0) }
44
- let(:version_1) { ExpectedVersion.new(1) }
45
- let(:version_2) { ExpectedVersion.new(2) }
46
- let(:version_3) { ExpectedVersion.new(3) }
38
+ let(:stream) { Stream.new(SecureRandom.uuid) }
39
+ let(:stream_flow) { Stream.new("flow") }
40
+ let(:stream_other) { Stream.new("other") }
41
+ let(:stream_test) { Stream.new("test") }
42
+ let(:version_none) { ExpectedVersion.none }
43
+ let(:version_auto) { ExpectedVersion.auto }
44
+ let(:version_any) { ExpectedVersion.any }
45
+ let(:version_0) { ExpectedVersion.new(0) }
46
+ let(:version_1) { ExpectedVersion.new(1) }
47
+ let(:version_2) { ExpectedVersion.new(2) }
48
+ let(:version_3) { ExpectedVersion.new(3) }
47
49
 
48
50
  def verify_conncurency_assumptions(helper)
49
51
  return unless helper.has_connection_pooling?
50
- expect(helper.connection_pool_size).to eq(5), "expected connection pool of size 5, got #{helper.connection_pool_size}"
52
+ expect(helper.connection_pool_size).to eq(5),
53
+ "expected connection pool of size 5, got #{helper.connection_pool_size}"
51
54
  end
52
55
 
53
56
  def read_events(repository, scope, stream = nil, from: nil, to: nil, count: nil)
@@ -104,64 +107,39 @@ module RubyEventStore
104
107
  end
105
108
 
106
109
  specify "adds multiple initial events to a new stream" do
107
- repository.append_to_stream([
108
- event0 = SRecord.new,
109
- event1 = SRecord.new,
110
- ], stream, version_none)
110
+ repository.append_to_stream([event0 = SRecord.new, event1 = SRecord.new], stream, version_none)
111
111
  expect(read_events_forward(repository, count: 2)).to eq([event0, event1])
112
112
  expect(read_events_forward(repository, stream)).to eq([event0, event1])
113
113
  end
114
114
 
115
115
  specify "links multiple initial events to a new stream" do
116
- repository.append_to_stream([
117
- event0 = SRecord.new,
118
- event1 = SRecord.new,
119
- ], stream, version_none).link_to_stream([
120
- event0.event_id,
121
- event1.event_id,
122
- ], stream_flow, version_none)
116
+ repository
117
+ .append_to_stream([event0 = SRecord.new, event1 = SRecord.new], stream, version_none)
118
+ .link_to_stream([event0.event_id, event1.event_id], stream_flow, version_none)
123
119
  expect(read_events_forward(repository, count: 2)).to eq([event0, event1])
124
120
  expect(read_events_forward(repository, stream_flow)).to eq([event0, event1])
125
121
  end
126
122
 
127
123
  specify "correct expected version on second write" do
128
- repository.append_to_stream([
129
- event0 = SRecord.new,
130
- event1 = SRecord.new,
131
- ], stream, version_none)
132
- repository.append_to_stream([
133
- event2 = SRecord.new,
134
- event3 = SRecord.new,
135
- ], stream, version_1)
124
+ repository.append_to_stream([event0 = SRecord.new, event1 = SRecord.new], stream, version_none)
125
+ repository.append_to_stream([event2 = SRecord.new, event3 = SRecord.new], stream, version_1)
136
126
  expect(read_events_forward(repository, count: 4)).to eq([event0, event1, event2, event3])
137
127
  expect(read_events_forward(repository, stream)).to eq([event0, event1, event2, event3])
138
128
  end
139
129
 
140
130
  specify "correct expected version on second link" do
141
- repository.append_to_stream([
142
- event0 = SRecord.new,
143
- event1 = SRecord.new,
144
- ], stream, version_none).append_to_stream([
145
- event2 = SRecord.new,
146
- event3 = SRecord.new,
147
- ], stream_flow, version_none).link_to_stream([
148
- event0.event_id,
149
- event1.event_id,
150
- ], stream_flow, version_1)
131
+ repository
132
+ .append_to_stream([event0 = SRecord.new, event1 = SRecord.new], stream, version_none)
133
+ .append_to_stream([event2 = SRecord.new, event3 = SRecord.new], stream_flow, version_none)
134
+ .link_to_stream([event0.event_id, event1.event_id], stream_flow, version_1)
151
135
  expect(read_events_forward(repository, count: 4)).to eq([event0, event1, event2, event3])
152
136
  expect(read_events_forward(repository, stream_flow)).to eq([event2, event3, event0, event1])
153
137
  end
154
138
 
155
139
  specify "incorrect expected version on second write" do
156
- repository.append_to_stream([
157
- event0 = SRecord.new,
158
- event1 = SRecord.new,
159
- ], stream, version_none)
140
+ repository.append_to_stream([event0 = SRecord.new, event1 = SRecord.new], stream, version_none)
160
141
  expect do
161
- repository.append_to_stream([
162
- event2 = SRecord.new,
163
- event3 = SRecord.new,
164
- ], stream, version_0)
142
+ repository.append_to_stream([event2 = SRecord.new, event3 = SRecord.new], stream, version_0)
165
143
  end.to raise_error(WrongExpectedEventVersion)
166
144
 
167
145
  expect(read_events_forward(repository, count: 4)).to eq([event0, event1])
@@ -169,233 +147,140 @@ module RubyEventStore
169
147
  end
170
148
 
171
149
  specify "incorrect expected version on second link" do
172
- repository.append_to_stream([
173
- event0 = SRecord.new,
174
- event1 = SRecord.new,
175
- ], stream, version_none)
176
- repository.append_to_stream([
177
- event2 = SRecord.new,
178
- event3 = SRecord.new,
179
- ], stream_other, version_none)
180
- expect do
181
- repository.link_to_stream([
182
- event2.event_id,
183
- event3.event_id,
184
- ], stream, version_0)
185
- end.to raise_error(WrongExpectedEventVersion)
150
+ repository.append_to_stream([event0 = SRecord.new, event1 = SRecord.new], stream, version_none)
151
+ repository.append_to_stream([event2 = SRecord.new, event3 = SRecord.new], stream_other, version_none)
152
+ expect { repository.link_to_stream([event2.event_id, event3.event_id], stream, version_0) }.to raise_error(
153
+ WrongExpectedEventVersion
154
+ )
186
155
 
187
156
  expect(read_events_forward(repository, count: 4)).to eq([event0, event1, event2, event3])
188
157
  expect(read_events_forward(repository, stream)).to eq([event0, event1])
189
158
  end
190
159
 
191
160
  specify ":none on first and subsequent write" do
192
- repository.append_to_stream([
193
- eventA = SRecord.new,
194
- ], stream, version_none)
195
- expect do
196
- repository.append_to_stream([
197
- eventB = SRecord.new,
198
- ], stream, version_none)
199
- end.to raise_error(WrongExpectedEventVersion)
161
+ repository.append_to_stream([eventA = SRecord.new], stream, version_none)
162
+ expect { repository.append_to_stream([eventB = SRecord.new], stream, version_none) }.to raise_error(
163
+ WrongExpectedEventVersion
164
+ )
200
165
  expect(read_events_forward(repository, count: 1)).to eq([eventA])
201
166
  expect(read_events_forward(repository, stream)).to eq([eventA])
202
167
  end
203
168
 
204
169
  specify ":none on first and subsequent link" do
205
- repository.append_to_stream([
206
- eventA = SRecord.new,
207
- eventB = SRecord.new,
208
- ], stream, version_none)
170
+ repository.append_to_stream([eventA = SRecord.new, eventB = SRecord.new], stream, version_none)
209
171
 
210
172
  repository.link_to_stream([eventA.event_id], stream_flow, version_none)
211
- expect do
212
- repository.link_to_stream([eventB.event_id], stream_flow, version_none)
213
- end.to raise_error(WrongExpectedEventVersion)
173
+ expect { repository.link_to_stream([eventB.event_id], stream_flow, version_none) }.to raise_error(
174
+ WrongExpectedEventVersion
175
+ )
214
176
 
215
177
  expect(read_events_forward(repository, count: 1)).to eq([eventA])
216
178
  expect(read_events_forward(repository, stream_flow)).to eq([eventA])
217
179
  end
218
180
 
219
181
  specify ":any allows stream with best-effort order and no guarantee" do
220
- repository.append_to_stream([
221
- event0 = SRecord.new,
222
- event1 = SRecord.new,
223
- ], stream, version_any)
224
- repository.append_to_stream([
225
- event2 = SRecord.new,
226
- event3 = SRecord.new,
227
- ], stream, version_any)
182
+ repository.append_to_stream([event0 = SRecord.new, event1 = SRecord.new], stream, version_any)
183
+ repository.append_to_stream([event2 = SRecord.new, event3 = SRecord.new], stream, version_any)
228
184
  expect(read_events_forward(repository, count: 4).to_set).to eq(Set.new([event0, event1, event2, event3]))
229
185
  expect(read_events_forward(repository, stream).to_set).to eq(Set.new([event0, event1, event2, event3]))
230
186
  end
231
187
 
232
188
  specify ":any allows linking in stream with best-effort order and no guarantee" do
233
- repository.append_to_stream([
234
- event0 = SRecord.new,
235
- event1 = SRecord.new,
236
- event2 = SRecord.new,
237
- event3 = SRecord.new,
238
- ], stream, version_any)
239
-
240
- repository.link_to_stream([
241
- event0.event_id, event1.event_id,
242
- ], stream_flow, version_any)
243
- repository.link_to_stream([
244
- event2.event_id, event3.event_id,
245
- ], stream_flow, version_any)
189
+ repository.append_to_stream(
190
+ [event0 = SRecord.new, event1 = SRecord.new, event2 = SRecord.new, event3 = SRecord.new],
191
+ stream,
192
+ version_any
193
+ )
194
+
195
+ repository.link_to_stream([event0.event_id, event1.event_id], stream_flow, version_any)
196
+ repository.link_to_stream([event2.event_id, event3.event_id], stream_flow, version_any)
246
197
 
247
198
  expect(read_events_forward(repository, count: 4).to_set).to eq(Set.new([event0, event1, event2, event3]))
248
199
  expect(read_events_forward(repository, stream_flow).to_set).to eq(Set.new([event0, event1, event2, event3]))
249
200
  end
250
201
 
251
202
  specify ":auto queries for last position in given stream" do
252
- repository.append_to_stream([
253
- eventA = SRecord.new,
254
- eventB = SRecord.new,
255
- eventC = SRecord.new,
256
- ], stream_other, version_auto)
257
- repository.append_to_stream([
258
- event0 = SRecord.new,
259
- event1 = SRecord.new,
260
- ], stream, version_auto)
261
- repository.append_to_stream([
262
- event2 = SRecord.new,
263
- event3 = SRecord.new,
264
- ], stream, version_1)
203
+ repository.append_to_stream(
204
+ [eventA = SRecord.new, eventB = SRecord.new, eventC = SRecord.new],
205
+ stream_other,
206
+ version_auto
207
+ )
208
+ repository.append_to_stream([event0 = SRecord.new, event1 = SRecord.new], stream, version_auto)
209
+ repository.append_to_stream([event2 = SRecord.new, event3 = SRecord.new], stream, version_1)
265
210
  end
266
211
 
267
212
  specify ":auto queries for last position in given stream when linking" do
268
- repository.append_to_stream([
269
- eventA = SRecord.new,
270
- eventB = SRecord.new,
271
- eventC = SRecord.new,
272
- ], stream_other, version_auto)
273
- repository.append_to_stream([
274
- event0 = SRecord.new,
275
- event1 = SRecord.new,
276
- ], stream, version_auto)
277
- repository.link_to_stream([
278
- eventA.event_id,
279
- eventB.event_id,
280
- eventC.event_id,
281
- ], stream, version_1)
213
+ repository.append_to_stream(
214
+ [eventA = SRecord.new, eventB = SRecord.new, eventC = SRecord.new],
215
+ stream_other,
216
+ version_auto
217
+ )
218
+ repository.append_to_stream([event0 = SRecord.new, event1 = SRecord.new], stream, version_auto)
219
+ repository.link_to_stream([eventA.event_id, eventB.event_id, eventC.event_id], stream, version_1)
282
220
  end
283
221
 
284
222
  specify ":auto starts from 0" do
285
- repository.append_to_stream([
286
- event0 = SRecord.new,
287
- ], stream, version_auto)
288
- expect do
289
- repository.append_to_stream([
290
- event1 = SRecord.new,
291
- ], stream, version_none)
292
- end.to raise_error(WrongExpectedEventVersion)
223
+ repository.append_to_stream([event0 = SRecord.new], stream, version_auto)
224
+ expect { repository.append_to_stream([event1 = SRecord.new], stream, version_none) }.to raise_error(
225
+ WrongExpectedEventVersion
226
+ )
293
227
  end
294
228
 
295
229
  specify ":auto linking starts from 0" do
296
- repository.append_to_stream([
297
- event0 = SRecord.new,
298
- ], stream_other, version_auto)
299
- repository.link_to_stream([
300
- event0.event_id,
301
- ], stream, version_auto)
302
- expect do
303
- repository.append_to_stream([
304
- event1 = SRecord.new,
305
- ], stream, version_none)
306
- end.to raise_error(WrongExpectedEventVersion)
230
+ repository.append_to_stream([event0 = SRecord.new], stream_other, version_auto)
231
+ repository.link_to_stream([event0.event_id], stream, version_auto)
232
+ expect { repository.append_to_stream([event1 = SRecord.new], stream, version_none) }.to raise_error(
233
+ WrongExpectedEventVersion
234
+ )
307
235
  end
308
236
 
309
237
  specify ":auto queries for last position and follows in incremental way" do
310
238
  # It is expected that there is higher level lock
311
239
  # So this query is safe from race conditions
312
- repository.append_to_stream([
313
- event0 = SRecord.new,
314
- event1 = SRecord.new,
315
- ], stream, version_auto)
316
- repository.append_to_stream([
317
- event2 = SRecord.new,
318
- event3 = SRecord.new,
319
- ], stream, version_auto)
320
- expect(read_events_forward(repository, count: 4)).to eq([
321
- event0, event1,
322
- event2, event3
323
- ])
240
+ repository.append_to_stream([event0 = SRecord.new, event1 = SRecord.new], stream, version_auto)
241
+ repository.append_to_stream([event2 = SRecord.new, event3 = SRecord.new], stream, version_auto)
242
+ expect(read_events_forward(repository, count: 4)).to eq([event0, event1, event2, event3])
324
243
  expect(read_events_forward(repository, stream)).to eq([event0, event1, event2, event3])
325
244
  end
326
245
 
327
246
  specify ":auto queries for last position and follows in incremental way when linking" do
328
- repository.append_to_stream([
329
- event0 = SRecord.new,
330
- event1 = SRecord.new,
331
- event2 = SRecord.new,
332
- event3 = SRecord.new,
333
- ], stream, version_auto)
334
- repository.link_to_stream([
335
- event0.event_id, event1.event_id,
336
- ], stream_flow, version_auto)
337
- repository.link_to_stream([
338
- event2.event_id, event3.event_id,
339
- ], stream_flow, version_auto)
340
- expect(read_events_forward(repository, count: 4)).to eq([
341
- event0, event1,
342
- event2, event3
343
- ])
247
+ repository.append_to_stream(
248
+ [event0 = SRecord.new, event1 = SRecord.new, event2 = SRecord.new, event3 = SRecord.new],
249
+ stream,
250
+ version_auto
251
+ )
252
+ repository.link_to_stream([event0.event_id, event1.event_id], stream_flow, version_auto)
253
+ repository.link_to_stream([event2.event_id, event3.event_id], stream_flow, version_auto)
254
+ expect(read_events_forward(repository, count: 4)).to eq([event0, event1, event2, event3])
344
255
  expect(read_events_forward(repository, stream_flow)).to eq([event0, event1, event2, event3])
345
256
  end
346
257
 
347
258
  specify ":auto is compatible with manual expectation" do
348
- repository.append_to_stream([
349
- event0 = SRecord.new,
350
- event1 = SRecord.new,
351
- ], stream, version_auto)
352
- repository.append_to_stream([
353
- event2 = SRecord.new,
354
- event3 = SRecord.new,
355
- ], stream, version_1)
259
+ repository.append_to_stream([event0 = SRecord.new, event1 = SRecord.new], stream, version_auto)
260
+ repository.append_to_stream([event2 = SRecord.new, event3 = SRecord.new], stream, version_1)
356
261
  expect(read_events_forward(repository, count: 4)).to eq([event0, event1, event2, event3])
357
262
  expect(read_events_forward(repository, stream)).to eq([event0, event1, event2, event3])
358
263
  end
359
264
 
360
265
  specify ":auto is compatible with manual expectation when linking" do
361
- repository.append_to_stream([
362
- event0 = SRecord.new,
363
- event1 = SRecord.new,
364
- ], stream, version_auto)
365
- repository.link_to_stream([
366
- event0.event_id,
367
- ], stream_flow, version_auto)
368
- repository.link_to_stream([
369
- event1.event_id,
370
- ], stream_flow, version_0)
371
- expect(read_events_forward(repository, count: 4)).to eq([event0, event1,])
372
- expect(read_events_forward(repository, stream_flow)).to eq([event0, event1,])
266
+ repository.append_to_stream([event0 = SRecord.new, event1 = SRecord.new], stream, version_auto)
267
+ repository.link_to_stream([event0.event_id], stream_flow, version_auto)
268
+ repository.link_to_stream([event1.event_id], stream_flow, version_0)
269
+ expect(read_events_forward(repository, count: 4)).to eq([event0, event1])
270
+ expect(read_events_forward(repository, stream_flow)).to eq([event0, event1])
373
271
  end
374
272
 
375
273
  specify "manual is compatible with auto expectation" do
376
- repository.append_to_stream([
377
- event0 = SRecord.new,
378
- event1 = SRecord.new,
379
- ], stream, version_none)
380
- repository.append_to_stream([
381
- event2 = SRecord.new,
382
- event3 = SRecord.new,
383
- ], stream, version_auto)
274
+ repository.append_to_stream([event0 = SRecord.new, event1 = SRecord.new], stream, version_none)
275
+ repository.append_to_stream([event2 = SRecord.new, event3 = SRecord.new], stream, version_auto)
384
276
  expect(read_events_forward(repository, count: 4)).to eq([event0, event1, event2, event3])
385
277
  expect(read_events_forward(repository, stream)).to eq([event0, event1, event2, event3])
386
278
  end
387
279
 
388
280
  specify "manual is compatible with auto expectation when linking" do
389
- repository.append_to_stream([
390
- event0 = SRecord.new,
391
- event1 = SRecord.new,
392
- ], stream, version_auto)
393
- repository.link_to_stream([
394
- event0.event_id,
395
- ], stream_flow, version_none)
396
- repository.link_to_stream([
397
- event1.event_id,
398
- ], stream_flow, version_auto)
281
+ repository.append_to_stream([event0 = SRecord.new, event1 = SRecord.new], stream, version_auto)
282
+ repository.link_to_stream([event0.event_id], stream_flow, version_none)
283
+ repository.link_to_stream([event1.event_id], stream_flow, version_auto)
399
284
  expect(read_events_forward(repository, count: 4)).to eq([event0, event1])
400
285
  expect(read_events_forward(repository, stream_flow)).to eq([event0, event1])
401
286
  end
@@ -405,34 +290,31 @@ module RubyEventStore
405
290
  verify_conncurency_assumptions(helper)
406
291
  begin
407
292
  concurrency_level = 4
408
- fail_occurred = false
409
- wait_for_it = true
293
+ fail_occurred = false
294
+ wait_for_it = true
410
295
 
411
- threads = concurrency_level.times.map do |i|
412
- Thread.new do
413
- true while wait_for_it
414
- begin
415
- 100.times do |j|
416
- eid = "0000000#{i}-#{sprintf("%04d", j)}-0000-0000-000000000000"
417
- repository.append_to_stream([
418
- SRecord.new(event_id: eid),
419
- ], stream, version_any)
296
+ threads =
297
+ concurrency_level.times.map do |i|
298
+ Thread.new do
299
+ true while wait_for_it
300
+ begin
301
+ 100.times do |j|
302
+ eid = "0000000#{i}-#{sprintf("%04d", j)}-0000-0000-000000000000"
303
+ repository.append_to_stream([SRecord.new(event_id: eid)], stream, version_any)
304
+ end
305
+ rescue WrongExpectedEventVersion
306
+ fail_occurred = true
420
307
  end
421
- rescue WrongExpectedEventVersion
422
- fail_occurred = true
423
308
  end
424
309
  end
425
- end
426
310
  wait_for_it = false
427
311
  threads.each(&:join)
428
312
  expect(fail_occurred).to eq(false)
429
313
  expect(read_events_forward(repository, stream).size).to eq(400)
430
314
  events_in_stream = read_events_forward(repository, stream)
431
315
  expect(events_in_stream.size).to eq(400)
432
- events0 = events_in_stream.select do |ev|
433
- ev.event_id.start_with?("0-")
434
- end
435
- expect(events0).to eq(events0.sort_by{|ev| ev.event_id })
316
+ events0 = events_in_stream.select { |ev| ev.event_id.start_with?("0-") }
317
+ expect(events0).to eq(events0.sort_by { |ev| ev.event_id })
436
318
  end
437
319
  end
438
320
 
@@ -441,86 +323,85 @@ module RubyEventStore
441
323
  verify_conncurency_assumptions(helper)
442
324
  begin
443
325
  concurrency_level = 4
444
- fail_occurred = false
445
- wait_for_it = true
326
+ fail_occurred = false
327
+ wait_for_it = true
446
328
 
447
329
  concurrency_level.times.map do |i|
448
330
  100.times do |j|
449
331
  eid = "0000000#{i}-#{sprintf("%04d", j)}-0000-0000-000000000000"
450
- repository.append_to_stream([
451
- SRecord.new(event_id: eid),
452
- ], stream, version_any)
332
+ repository.append_to_stream([SRecord.new(event_id: eid)], stream, version_any)
453
333
  end
454
334
  end
455
335
 
456
- threads = concurrency_level.times.map do |i|
457
- Thread.new do
458
- true while wait_for_it
459
- begin
460
- 100.times do |j|
461
- eid = "0000000#{i}-#{sprintf("%04d", j)}-0000-0000-000000000000"
462
- repository.link_to_stream([eid], stream_flow, version_any)
336
+ threads =
337
+ concurrency_level.times.map do |i|
338
+ Thread.new do
339
+ true while wait_for_it
340
+ begin
341
+ 100.times do |j|
342
+ eid = "0000000#{i}-#{sprintf("%04d", j)}-0000-0000-000000000000"
343
+ repository.link_to_stream([eid], stream_flow, version_any)
344
+ end
345
+ rescue WrongExpectedEventVersion
346
+ fail_occurred = true
463
347
  end
464
- rescue WrongExpectedEventVersion
465
- fail_occurred = true
466
348
  end
467
349
  end
468
- end
469
350
  wait_for_it = false
470
351
  threads.each(&:join)
471
352
  expect(fail_occurred).to eq(false)
472
353
  expect(read_events_forward(repository, stream_flow).size).to eq(400)
473
354
  events_in_stream = read_events_forward(repository, stream_flow)
474
355
  expect(events_in_stream.size).to eq(400)
475
- events0 = events_in_stream.select do |ev|
476
- ev.event_id.start_with?("0-")
477
- end
478
- expect(events0).to eq(events0.sort_by{|ev| ev.event_id })
356
+ events0 = events_in_stream.select { |ev| ev.event_id.start_with?("0-") }
357
+ expect(events0).to eq(events0.sort_by { |ev| ev.event_id })
479
358
  end
480
359
  end
481
360
 
482
- specify "limited concurrency for :auto - some operations will fail without outside lock, stream is ordered", mutant: false do
361
+ specify "limited concurrency for :auto - some operations will fail without outside lock, stream is ordered",
362
+ mutant: false do
483
363
  skip unless helper.supports_concurrent_auto?
484
364
  verify_conncurency_assumptions(helper)
485
365
  begin
486
366
  concurrency_level = 4
487
367
 
488
368
  fail_occurred = 0
489
- wait_for_it = true
369
+ wait_for_it = true
490
370
 
491
- threads = concurrency_level.times.map do |i|
492
- Thread.new do
493
- true while wait_for_it
494
- 100.times do |j|
495
- begin
496
- eid = "0000000#{i}-#{sprintf("%04d", j)}-0000-0000-000000000000"
497
- repository.append_to_stream([
498
- SRecord.new(event_id: eid),
499
- ], stream, version_auto)
500
- sleep(rand(concurrency_level) / 1000.0)
501
- rescue WrongExpectedEventVersion
502
- fail_occurred +=1
371
+ threads =
372
+ concurrency_level.times.map do |i|
373
+ Thread.new do
374
+ true while wait_for_it
375
+ 100.times do |j|
376
+ begin
377
+ eid = "0000000#{i}-#{sprintf("%04d", j)}-0000-0000-000000000000"
378
+ repository.append_to_stream([SRecord.new(event_id: eid)], stream, version_auto)
379
+ sleep(rand(concurrency_level) / 1000.0)
380
+ rescue WrongExpectedEventVersion
381
+ fail_occurred += 1
382
+ end
503
383
  end
504
384
  end
505
385
  end
506
- end
507
386
  wait_for_it = false
508
387
  threads.each(&:join)
509
388
  expect(fail_occurred).to be > 0
510
389
  events_in_stream = read_events_forward(repository, stream)
511
390
  expect(events_in_stream.size).to be < 400
512
391
  expect(events_in_stream.size).to be >= 100
513
- events0 = events_in_stream.select do |ev|
514
- ev.event_id.start_with?("0-")
515
- end
516
- expect(events0).to eq(events0.sort_by{|ev| ev.event_id })
392
+ events0 = events_in_stream.select { |ev| ev.event_id.start_with?("0-") }
393
+ expect(events0).to eq(events0.sort_by { |ev| ev.event_id })
517
394
 
518
- positions = repository.read(specification.stream(stream.name).result).map { |r| repository.position_in_stream(r.event_id, stream) }
395
+ positions =
396
+ repository
397
+ .read(specification.stream(stream.name).result)
398
+ .map { |r| repository.position_in_stream(r.event_id, stream) }
519
399
  expect(positions).to eq((0...positions.size).to_a)
520
400
  end
521
401
  end
522
402
 
523
- specify "limited concurrency for :auto - some operations will fail without outside lock, stream is ordered", mutant: false do
403
+ specify "limited concurrency for :auto - some operations will fail without outside lock, stream is ordered",
404
+ mutant: false do
524
405
  skip unless helper.supports_concurrent_auto?
525
406
  verify_conncurency_assumptions(helper)
526
407
  begin
@@ -529,41 +410,41 @@ module RubyEventStore
529
410
  concurrency_level.times.map do |i|
530
411
  100.times do |j|
531
412
  eid = "0000000#{i}-#{sprintf("%04d", j)}-0000-0000-000000000000"
532
- repository.append_to_stream([
533
- SRecord.new(event_id: eid),
534
- ], stream_other, version_any)
413
+ repository.append_to_stream([SRecord.new(event_id: eid)], stream_other, version_any)
535
414
  end
536
415
  end
537
416
 
538
417
  fail_occurred = 0
539
- wait_for_it = true
418
+ wait_for_it = true
540
419
 
541
- threads = concurrency_level.times.map do |i|
542
- Thread.new do
543
- true while wait_for_it
544
- 100.times do |j|
545
- begin
546
- eid = "0000000#{i}-#{sprintf("%04d", j)}-0000-0000-000000000000"
547
- repository.link_to_stream([eid], stream, version_auto)
548
- sleep(rand(concurrency_level) / 1000.0)
549
- rescue WrongExpectedEventVersion
550
- fail_occurred +=1
420
+ threads =
421
+ concurrency_level.times.map do |i|
422
+ Thread.new do
423
+ true while wait_for_it
424
+ 100.times do |j|
425
+ begin
426
+ eid = "0000000#{i}-#{sprintf("%04d", j)}-0000-0000-000000000000"
427
+ repository.link_to_stream([eid], stream, version_auto)
428
+ sleep(rand(concurrency_level) / 1000.0)
429
+ rescue WrongExpectedEventVersion
430
+ fail_occurred += 1
431
+ end
551
432
  end
552
433
  end
553
434
  end
554
- end
555
435
  wait_for_it = false
556
436
  threads.each(&:join)
557
437
  expect(fail_occurred).to be > 0
558
438
  events_in_stream = read_events_forward(repository, stream)
559
439
  expect(events_in_stream.size).to be < 400
560
440
  expect(events_in_stream.size).to be >= 100
561
- events0 = events_in_stream.select do |ev|
562
- ev.event_id.start_with?("0-")
563
- end
564
- expect(events0).to eq(events0.sort_by{|ev| ev.event_id })
441
+ events0 = events_in_stream.select { |ev| ev.event_id.start_with?("0-") }
442
+ expect(events0).to eq(events0.sort_by { |ev| ev.event_id })
565
443
 
566
- positions = repository.read(specification.stream(stream.name).result).map { |r| repository.position_in_stream(r.event_id, stream) }
444
+ positions =
445
+ repository
446
+ .read(specification.stream(stream.name).result)
447
+ .map { |r| repository.position_in_stream(r.event_id, stream) }
567
448
  expect(positions).to eq((0...positions.size).to_a)
568
449
  end
569
450
  end
@@ -591,10 +472,7 @@ module RubyEventStore
591
472
  end
592
473
 
593
474
  it "data and metadata attributes are retrieved when linking" do
594
- event = SRecord.new(
595
- data: { "order_id" => 3 },
596
- metadata: { "request_id" => 4},
597
- )
475
+ event = SRecord.new(data: { "order_id" => 3 }, metadata: { "request_id" => 4 })
598
476
  repository
599
477
  .append_to_stream([event], stream, version_any)
600
478
  .link_to_stream([event.event_id], stream_flow, version_any)
@@ -611,7 +489,7 @@ module RubyEventStore
611
489
  repository.delete_stream(stream)
612
490
  expect(read_events_forward(repository, stream)).to be_empty
613
491
  expect(read_events_forward(repository, stream_other)).to eq([e2])
614
- expect(read_events_forward(repository, count: 10)).to eq([e1,e2])
492
+ expect(read_events_forward(repository, count: 10)).to eq([e1, e2])
615
493
  end
616
494
 
617
495
  it "does not have deleted streams with linked events" do
@@ -639,10 +517,7 @@ module RubyEventStore
639
517
 
640
518
  it "#position_in_stream happy path" do
641
519
  skip unless helper.supports_position_queries?
642
- repository.append_to_stream([
643
- event0 = SRecord.new,
644
- event1 = SRecord.new
645
- ], stream, version_auto)
520
+ repository.append_to_stream([event0 = SRecord.new, event1 = SRecord.new], stream, version_auto)
646
521
 
647
522
  expect(repository.position_in_stream(event0.event_id, stream)).to eq(0)
648
523
  expect(repository.position_in_stream(event1.event_id, stream)).to eq(1)
@@ -650,14 +525,8 @@ module RubyEventStore
650
525
 
651
526
  it "#position_in_stream happy path with linking" do
652
527
  skip unless helper.supports_position_queries?
653
- repository.append_to_stream([
654
- event0 = SRecord.new,
655
- event1 = SRecord.new
656
- ], stream, version_auto)
657
- repository.link_to_stream([
658
- event1.event_id,
659
- event0.event_id,
660
- ], stream_other, version_auto)
528
+ repository.append_to_stream([event0 = SRecord.new, event1 = SRecord.new], stream, version_auto)
529
+ repository.link_to_stream([event1.event_id, event0.event_id], stream_other, version_auto)
661
530
 
662
531
  expect(repository.position_in_stream(event0.event_id, stream)).to eq(0)
663
532
  expect(repository.position_in_stream(event1.event_id, stream)).to eq(1)
@@ -669,9 +538,7 @@ module RubyEventStore
669
538
  skip unless helper.supports_position_queries?
670
539
  just_an_id = "d5c134c2-db65-4e87-b6ea-d196f8f1a292"
671
540
 
672
- expect do
673
- repository.position_in_stream(just_an_id, stream)
674
- end.to raise_error(EventNotFoundInStream)
541
+ expect { repository.position_in_stream(just_an_id, stream) }.to raise_error(EventNotFoundInStream)
675
542
  end
676
543
 
677
544
  it "#position_in_stream when event is published without position" do
@@ -683,10 +550,7 @@ module RubyEventStore
683
550
 
684
551
  it "#global_position happy path" do
685
552
  skip unless helper.supports_position_queries?
686
- repository.append_to_stream([
687
- event0 = SRecord.new,
688
- event1 = SRecord.new
689
- ], stream, version_any)
553
+ repository.append_to_stream([event0 = SRecord.new, event1 = SRecord.new], stream, version_any)
690
554
 
691
555
  expect(repository.global_position(event0.event_id)).to eq(0)
692
556
  expect(repository.global_position(event1.event_id)).to eq(1)
@@ -696,46 +560,94 @@ module RubyEventStore
696
560
  skip unless helper.supports_position_queries?
697
561
  just_an_id = "d5c134c2-db65-4e87-b6ea-d196f8f1a292"
698
562
 
699
- expect do
700
- repository.global_position(just_an_id)
701
- end.to raise_error do |err|
563
+ expect { repository.global_position(just_an_id) }.to raise_error do |err|
702
564
  expect(err).to be_a(EventNotFound)
703
565
  expect(err.event_id).to eq(just_an_id)
704
566
  end
705
567
  end
706
568
 
569
+ it "#event_in_stream? when event does not exist" do
570
+ skip unless helper.supports_event_in_stream_query?
571
+ repository.append_to_stream([SRecord.new], stream, version_any)
572
+ just_an_id = "d5c134c2-db65-4e87-b6ea-d196f8f1a292"
573
+
574
+ expect(repository.event_in_stream?(just_an_id, stream)).to eq(false)
575
+ end
576
+
577
+ it "#event_in_stream? when event published into stream" do
578
+ skip unless helper.supports_event_in_stream_query?
579
+ repository.append_to_stream([event0 = SRecord.new], stream, version_any)
580
+
581
+ expect(repository.event_in_stream?(event0.event_id, stream)).to eq(true)
582
+ end
583
+
584
+ it "#event_in_stream? when event not linked into stream" do
585
+ skip unless helper.supports_event_in_stream_query?
586
+ repository.append_to_stream([SRecord.new], stream_flow, version_any)
587
+ repository.append_to_stream([event1 = SRecord.new], stream, version_any)
588
+
589
+ expect(repository.event_in_stream?(event1.event_id, stream_flow)).to eq(false)
590
+ end
591
+
592
+ it "#event_in_stream? when event linked into stream" do
593
+ skip unless helper.supports_event_in_stream_query?
594
+ repository.append_to_stream([event0 = SRecord.new], stream, version_any)
595
+ repository.link_to_stream([event0.event_id], stream_flow, version_any)
596
+
597
+ expect(repository.event_in_stream?(event0.event_id, stream_flow)).to eq(true)
598
+ end
599
+
600
+ it "#event_in_stream? when stream is empty" do
601
+ skip unless helper.supports_event_in_stream_query?
602
+ just_an_id = "d5c134c2-db65-4e87-b6ea-d196f8f1a292"
603
+
604
+ expect(repository.event_in_stream?(just_an_id, stream)).to eq(false)
605
+ end
606
+
707
607
  it "knows last event in stream" do
708
- repository.append_to_stream([a =SRecord.new(event_id: "00000000-0000-0000-0000-000000000001")], stream, version_none)
709
- repository.append_to_stream([b = SRecord.new(event_id: "00000000-0000-0000-0000-000000000002")], stream, version_0)
608
+ repository.append_to_stream(
609
+ [a = SRecord.new(event_id: "00000000-0000-0000-0000-000000000001")],
610
+ stream,
611
+ version_none
612
+ )
613
+ repository.append_to_stream(
614
+ [b = SRecord.new(event_id: "00000000-0000-0000-0000-000000000002")],
615
+ stream,
616
+ version_0
617
+ )
710
618
 
711
619
  expect(repository.last_stream_event(stream)).to eq(b)
712
620
  expect(repository.last_stream_event(stream_other)).to be_nil
713
621
  end
714
622
 
715
623
  it "knows last event in stream when linked" do
716
- repository.append_to_stream([
717
- e0 = SRecord.new(event_id: "00000000-0000-0000-0000-000000000001"),
718
- e1 = SRecord.new(event_id: "00000000-0000-0000-0000-000000000002"),
719
- ],
720
- stream,
721
- version_none
722
- ).link_to_stream([e1.event_id, e0.event_id], stream_flow, version_none)
624
+ repository
625
+ .append_to_stream(
626
+ [
627
+ e0 = SRecord.new(event_id: "00000000-0000-0000-0000-000000000001"),
628
+ e1 = SRecord.new(event_id: "00000000-0000-0000-0000-000000000002")
629
+ ],
630
+ stream,
631
+ version_none
632
+ )
633
+ .link_to_stream([e1.event_id, e0.event_id], stream_flow, version_none)
723
634
  expect(repository.last_stream_event(stream_flow)).to eq(e0)
724
635
  end
725
636
 
726
637
  it "reads batch of events from stream forward & backward" do
727
- events = %w[
728
- 96c920b1-cdd0-40f4-907c-861b9fff7d02
729
- 56404f79-0ba0-4aa0-8524-dc3436368ca0
730
- 6a54dd21-f9d8-4857-a195-f5588d9e406c
731
- 0e50a9cd-f981-4e39-93d5-697fc7285b98
732
- d85589bc-b993-41d4-812f-fc631d9185d5
733
- 96bdacda-77dd-4d7d-973d-cbdaa5842855
734
- 94688199-e6b7-4180-bf8e-825b6808e6cc
735
- 68fab040-741e-4bc2-9cca-5b8855b0ca19
736
- ab60114c-011d-4d58-ab31-7ba65d99975e
737
- 868cac42-3d19-4b39-84e8-cd32d65c2445
738
- ].map { |id| SRecord.new(event_id: id) }
638
+ events =
639
+ %w[
640
+ 96c920b1-cdd0-40f4-907c-861b9fff7d02
641
+ 56404f79-0ba0-4aa0-8524-dc3436368ca0
642
+ 6a54dd21-f9d8-4857-a195-f5588d9e406c
643
+ 0e50a9cd-f981-4e39-93d5-697fc7285b98
644
+ d85589bc-b993-41d4-812f-fc631d9185d5
645
+ 96bdacda-77dd-4d7d-973d-cbdaa5842855
646
+ 94688199-e6b7-4180-bf8e-825b6808e6cc
647
+ 68fab040-741e-4bc2-9cca-5b8855b0ca19
648
+ ab60114c-011d-4d58-ab31-7ba65d99975e
649
+ 868cac42-3d19-4b39-84e8-cd32d65c2445
650
+ ].map { |id| SRecord.new(event_id: id) }
739
651
  repository.append_to_stream([SRecord.new], stream_other, version_none)
740
652
  events.each.with_index do |event, index|
741
653
  repository.append_to_stream([event], stream, ExpectedVersion.new(index - 1))
@@ -752,25 +664,30 @@ module RubyEventStore
752
664
 
753
665
  expect(read_events_backward(repository, stream, count: 3)).to eq(events.last(3).reverse)
754
666
  expect(read_events_backward(repository, stream, count: 100)).to eq(events.reverse)
755
- expect(read_events_backward(repository, stream, from: events[4].event_id, count: 4)).to eq(events.first(4).reverse)
756
- expect(read_events_backward(repository, stream, from: events[4].event_id, count: 100)).to eq(events.first(4).reverse)
667
+ expect(read_events_backward(repository, stream, from: events[4].event_id, count: 4)).to eq(
668
+ events.first(4).reverse
669
+ )
670
+ expect(read_events_backward(repository, stream, from: events[4].event_id, count: 100)).to eq(
671
+ events.first(4).reverse
672
+ )
757
673
  expect(read_events_backward(repository, stream, to: events[4].event_id, count: 4)).to eq(events.last(4).reverse)
758
674
  expect(read_events_backward(repository, stream, to: events[4].event_id, count: 100)).to eq(events.last(5).reverse)
759
675
  end
760
676
 
761
677
  it "reads batch of linked events from stream forward & backward" do
762
- events = %w[
763
- 96c920b1-cdd0-40f4-907c-861b9fff7d02
764
- 56404f79-0ba0-4aa0-8524-dc3436368ca0
765
- 6a54dd21-f9d8-4857-a195-f5588d9e406c
766
- 0e50a9cd-f981-4e39-93d5-697fc7285b98
767
- d85589bc-b993-41d4-812f-fc631d9185d5
768
- 96bdacda-77dd-4d7d-973d-cbdaa5842855
769
- 94688199-e6b7-4180-bf8e-825b6808e6cc
770
- 68fab040-741e-4bc2-9cca-5b8855b0ca19
771
- ab60114c-011d-4d58-ab31-7ba65d99975e
772
- 868cac42-3d19-4b39-84e8-cd32d65c2445
773
- ].map { |id| SRecord.new(event_id: id) }
678
+ events =
679
+ %w[
680
+ 96c920b1-cdd0-40f4-907c-861b9fff7d02
681
+ 56404f79-0ba0-4aa0-8524-dc3436368ca0
682
+ 6a54dd21-f9d8-4857-a195-f5588d9e406c
683
+ 0e50a9cd-f981-4e39-93d5-697fc7285b98
684
+ d85589bc-b993-41d4-812f-fc631d9185d5
685
+ 96bdacda-77dd-4d7d-973d-cbdaa5842855
686
+ 94688199-e6b7-4180-bf8e-825b6808e6cc
687
+ 68fab040-741e-4bc2-9cca-5b8855b0ca19
688
+ ab60114c-011d-4d58-ab31-7ba65d99975e
689
+ 868cac42-3d19-4b39-84e8-cd32d65c2445
690
+ ].map { |id| SRecord.new(event_id: id) }
774
691
  repository.append_to_stream([SRecord.new], stream_other, version_none)
775
692
  events.each.with_index do |event, index|
776
693
  repository
@@ -788,10 +705,18 @@ module RubyEventStore
788
705
 
789
706
  expect(read_events_backward(repository, stream_flow, count: 3)).to eq(events.last(3).reverse)
790
707
  expect(read_events_backward(repository, stream_flow, count: 100)).to eq(events.reverse)
791
- expect(read_events_backward(repository, stream_flow, from: events[4].event_id, count: 4)).to eq(events.first(4).reverse)
792
- expect(read_events_backward(repository, stream_flow, from: events[4].event_id, count: 100)).to eq(events.first(4).reverse)
793
- expect(read_events_backward(repository, stream_flow, to: events[4].event_id, count: 4)).to eq(events[6..9].reverse)
794
- expect(read_events_backward(repository, stream_flow, to: events[4].event_id, count: 100)).to eq(events[5..9].reverse)
708
+ expect(read_events_backward(repository, stream_flow, from: events[4].event_id, count: 4)).to eq(
709
+ events.first(4).reverse
710
+ )
711
+ expect(read_events_backward(repository, stream_flow, from: events[4].event_id, count: 100)).to eq(
712
+ events.first(4).reverse
713
+ )
714
+ expect(read_events_backward(repository, stream_flow, to: events[4].event_id, count: 4)).to eq(
715
+ events[6..9].reverse
716
+ )
717
+ expect(read_events_backward(repository, stream_flow, to: events[4].event_id, count: 100)).to eq(
718
+ events[5..9].reverse
719
+ )
795
720
  end
796
721
 
797
722
  it "reads all stream events forward & backward" do
@@ -804,8 +729,8 @@ module RubyEventStore
804
729
  .append_to_stream([d = SRecord.new(event_id: "30963ed9-6349-450b-ac9b-8ea50115b3bd")], s2, version_0)
805
730
  .append_to_stream([e = SRecord.new(event_id: "5bdc58b7-e8a7-4621-afd6-ccb828d72457")], s2, version_1)
806
731
 
807
- expect(read_events_forward(repository, s1)).to eq [a,c]
808
- expect(read_events_backward(repository, s1)).to eq [c,a]
732
+ expect(read_events_forward(repository, s1)).to eq [a, c]
733
+ expect(read_events_backward(repository, s1)).to eq [c, a]
809
734
  end
810
735
 
811
736
  it "reads all stream linked events forward & backward" do
@@ -822,26 +747,25 @@ module RubyEventStore
822
747
  .link_to_stream(["30963ed9-6349-450b-ac9b-8ea50115b3bd"], fs2, version_0)
823
748
  .link_to_stream(["5bdc58b7-e8a7-4621-afd6-ccb828d72457"], fs2, version_1)
824
749
 
825
- expect(read_events_forward(repository, fs1)).to eq [a,c]
826
- expect(read_events_backward(repository, fs1)).to eq [c,a]
750
+ expect(read_events_forward(repository, fs1)).to eq [a, c]
751
+ expect(read_events_backward(repository, fs1)).to eq [c, a]
827
752
  end
828
753
 
829
754
  it "reads batch of events from all streams forward & backward" do
830
- events = %w[
831
- 96c920b1-cdd0-40f4-907c-861b9fff7d02
832
- 56404f79-0ba0-4aa0-8524-dc3436368ca0
833
- 6a54dd21-f9d8-4857-a195-f5588d9e406c
834
- 0e50a9cd-f981-4e39-93d5-697fc7285b98
835
- d85589bc-b993-41d4-812f-fc631d9185d5
836
- 96bdacda-77dd-4d7d-973d-cbdaa5842855
837
- 94688199-e6b7-4180-bf8e-825b6808e6cc
838
- 68fab040-741e-4bc2-9cca-5b8855b0ca19
839
- ab60114c-011d-4d58-ab31-7ba65d99975e
840
- 868cac42-3d19-4b39-84e8-cd32d65c2445
841
- ].map { |id| SRecord.new(event_id: id) }
842
- events.each do |ev|
843
- repository.append_to_stream([ev], Stream.new(SecureRandom.uuid), version_none)
844
- end
755
+ events =
756
+ %w[
757
+ 96c920b1-cdd0-40f4-907c-861b9fff7d02
758
+ 56404f79-0ba0-4aa0-8524-dc3436368ca0
759
+ 6a54dd21-f9d8-4857-a195-f5588d9e406c
760
+ 0e50a9cd-f981-4e39-93d5-697fc7285b98
761
+ d85589bc-b993-41d4-812f-fc631d9185d5
762
+ 96bdacda-77dd-4d7d-973d-cbdaa5842855
763
+ 94688199-e6b7-4180-bf8e-825b6808e6cc
764
+ 68fab040-741e-4bc2-9cca-5b8855b0ca19
765
+ ab60114c-011d-4d58-ab31-7ba65d99975e
766
+ 868cac42-3d19-4b39-84e8-cd32d65c2445
767
+ ].map { |id| SRecord.new(event_id: id) }
768
+ events.each { |ev| repository.append_to_stream([ev], Stream.new(SecureRandom.uuid), version_none) }
845
769
 
846
770
  expect(read_events_forward(repository, count: 3)).to eq(events.first(3))
847
771
  expect(read_events_forward(repository, count: 100)).to eq(events)
@@ -859,18 +783,19 @@ module RubyEventStore
859
783
  end
860
784
 
861
785
  it "linked events do not affect reading from all streams - no duplicates" do
862
- events = %w[
863
- 96c920b1-cdd0-40f4-907c-861b9fff7d02
864
- 56404f79-0ba0-4aa0-8524-dc3436368ca0
865
- 6a54dd21-f9d8-4857-a195-f5588d9e406c
866
- 0e50a9cd-f981-4e39-93d5-697fc7285b98
867
- d85589bc-b993-41d4-812f-fc631d9185d5
868
- 96bdacda-77dd-4d7d-973d-cbdaa5842855
869
- 94688199-e6b7-4180-bf8e-825b6808e6cc
870
- 68fab040-741e-4bc2-9cca-5b8855b0ca19
871
- ab60114c-011d-4d58-ab31-7ba65d99975e
872
- 868cac42-3d19-4b39-84e8-cd32d65c2445
873
- ].map { |id| SRecord.new(event_id: id) }
786
+ events =
787
+ %w[
788
+ 96c920b1-cdd0-40f4-907c-861b9fff7d02
789
+ 56404f79-0ba0-4aa0-8524-dc3436368ca0
790
+ 6a54dd21-f9d8-4857-a195-f5588d9e406c
791
+ 0e50a9cd-f981-4e39-93d5-697fc7285b98
792
+ d85589bc-b993-41d4-812f-fc631d9185d5
793
+ 96bdacda-77dd-4d7d-973d-cbdaa5842855
794
+ 94688199-e6b7-4180-bf8e-825b6808e6cc
795
+ 68fab040-741e-4bc2-9cca-5b8855b0ca19
796
+ ab60114c-011d-4d58-ab31-7ba65d99975e
797
+ 868cac42-3d19-4b39-84e8-cd32d65c2445
798
+ ].map { |id| SRecord.new(event_id: id) }
874
799
  events.each do |ev|
875
800
  repository
876
801
  .append_to_stream([ev], Stream.new(SecureRandom.uuid), version_none)
@@ -893,45 +818,43 @@ module RubyEventStore
893
818
  end
894
819
 
895
820
  it "reads events different uuid object but same content" do
896
- events = %w[
897
- 96c920b1-cdd0-40f4-907c-861b9fff7d02
898
- 56404f79-0ba0-4aa0-8524-dc3436368ca0
899
- ].map{|id| SRecord.new(event_id: id) }
821
+ events =
822
+ %w[96c920b1-cdd0-40f4-907c-861b9fff7d02 56404f79-0ba0-4aa0-8524-dc3436368ca0].map do |id|
823
+ SRecord.new(event_id: id)
824
+ end
900
825
  repository.append_to_stream([events.first], stream, version_none)
901
- repository.append_to_stream([events.last], stream, version_0)
826
+ repository.append_to_stream([events.last], stream, version_0)
902
827
 
903
828
  expect(read_events_forward(repository, from: "96c920b1-cdd0-40f4-907c-861b9fff7d02")).to eq([events.last])
904
829
  expect(read_events_backward(repository, from: "56404f79-0ba0-4aa0-8524-dc3436368ca0")).to eq([events.first])
905
- expect(read_events_forward(repository, to: "56404f79-0ba0-4aa0-8524-dc3436368ca0", count: 1)).to eq([events.first])
906
- expect(read_events_backward(repository, to: "96c920b1-cdd0-40f4-907c-861b9fff7d02", count: 1)).to eq([events.last])
830
+ expect(read_events_forward(repository, to: "56404f79-0ba0-4aa0-8524-dc3436368ca0", count: 1)).to eq(
831
+ [events.first]
832
+ )
833
+ expect(read_events_backward(repository, to: "96c920b1-cdd0-40f4-907c-861b9fff7d02", count: 1)).to eq(
834
+ [events.last]
835
+ )
907
836
 
908
837
  expect(read_events_forward(repository, stream, from: "96c920b1-cdd0-40f4-907c-861b9fff7d02")).to eq([events.last])
909
- expect(read_events_backward(repository, stream, from: "56404f79-0ba0-4aa0-8524-dc3436368ca0")).to eq([events.first])
910
- expect(read_events_forward(repository, stream, to: "56404f79-0ba0-4aa0-8524-dc3436368ca0", count: 1)).to eq([events.first])
911
- expect(read_events_backward(repository, stream, to: "96c920b1-cdd0-40f4-907c-861b9fff7d02", count: 1)).to eq([events.last])
838
+ expect(read_events_backward(repository, stream, from: "56404f79-0ba0-4aa0-8524-dc3436368ca0")).to eq(
839
+ [events.first]
840
+ )
841
+ expect(read_events_forward(repository, stream, to: "56404f79-0ba0-4aa0-8524-dc3436368ca0", count: 1)).to eq(
842
+ [events.first]
843
+ )
844
+ expect(read_events_backward(repository, stream, to: "96c920b1-cdd0-40f4-907c-861b9fff7d02", count: 1)).to eq(
845
+ [events.last]
846
+ )
912
847
  end
913
848
 
914
849
  it "does not allow same event twice in a stream" do
915
- repository.append_to_stream(
916
- [SRecord.new(event_id: "a1b49edb-7636-416f-874a-88f94b859bef")],
917
- stream,
918
- version_none
919
- )
850
+ repository.append_to_stream([SRecord.new(event_id: "a1b49edb-7636-416f-874a-88f94b859bef")], stream, version_none)
920
851
  expect do
921
- repository.append_to_stream(
922
- [SRecord.new(event_id: "a1b49edb-7636-416f-874a-88f94b859bef")],
923
- stream,
924
- version_0
925
- )
852
+ repository.append_to_stream([SRecord.new(event_id: "a1b49edb-7636-416f-874a-88f94b859bef")], stream, version_0)
926
853
  end.to raise_error(EventDuplicatedInStream)
927
854
  end
928
855
 
929
856
  it "does not allow same event twice" do
930
- repository.append_to_stream(
931
- [SRecord.new(event_id: "a1b49edb-7636-416f-874a-88f94b859bef")],
932
- stream,
933
- version_none
934
- )
857
+ repository.append_to_stream([SRecord.new(event_id: "a1b49edb-7636-416f-874a-88f94b859bef")], stream, version_none)
935
858
  expect do
936
859
  repository.append_to_stream(
937
860
  [SRecord.new(event_id: "a1b49edb-7636-416f-874a-88f94b859bef")],
@@ -942,11 +865,9 @@ module RubyEventStore
942
865
  end
943
866
 
944
867
  it "does not allow linking same event twice in a stream" do
945
- repository.append_to_stream(
946
- [SRecord.new(event_id: "a1b49edb-7636-416f-874a-88f94b859bef")],
947
- stream,
948
- version_none
949
- ).link_to_stream(["a1b49edb-7636-416f-874a-88f94b859bef"], stream_flow, version_none)
868
+ repository
869
+ .append_to_stream([SRecord.new(event_id: "a1b49edb-7636-416f-874a-88f94b859bef")], stream, version_none)
870
+ .link_to_stream(["a1b49edb-7636-416f-874a-88f94b859bef"], stream_flow, version_none)
950
871
  expect do
951
872
  repository.link_to_stream(["a1b49edb-7636-416f-874a-88f94b859bef"], stream_flow, version_0)
952
873
  end.to raise_error(EventDuplicatedInStream)
@@ -993,11 +914,7 @@ module RubyEventStore
993
914
  binary.force_encoding("binary")
994
915
  expect(binary.valid_encoding?).to eq(true)
995
916
 
996
- repository.append_to_stream(
997
- [event = SRecord.new(data: binary, metadata: binary)],
998
- stream,
999
- version_none
1000
- )
917
+ repository.append_to_stream([event = SRecord.new(data: binary, metadata: binary)], stream, version_none)
1001
918
  end
1002
919
 
1003
920
  specify do
@@ -1005,29 +922,16 @@ module RubyEventStore
1005
922
  expect(repository.read(specification.in_batches.as_at.result)).to be_kind_of(Enumerator)
1006
923
  expect(repository.read(specification.in_batches.as_of.result)).to be_kind_of(Enumerator)
1007
924
  events = Array.new(10) { SRecord.new }
1008
- repository.append_to_stream(
1009
- events,
1010
- Stream.new("Dummy"),
1011
- ExpectedVersion.none
1012
- )
925
+ repository.append_to_stream(events, Stream.new("Dummy"), ExpectedVersion.none)
1013
926
  expect(repository.read(specification.in_batches.result)).to be_kind_of(Enumerator)
1014
927
  expect(repository.read(specification.in_batches.as_at.result)).to be_kind_of(Enumerator)
1015
928
  expect(repository.read(specification.in_batches.as_of.result)).to be_kind_of(Enumerator)
1016
-
1017
929
  end
1018
930
 
1019
931
  specify do
1020
932
  events = Array.new(400) { SRecord.new }
1021
- repository.append_to_stream(
1022
- events[200...400],
1023
- Stream.new("Foo"),
1024
- ExpectedVersion.none
1025
- )
1026
- repository.append_to_stream(
1027
- events[0...200],
1028
- Stream.new("Dummy"),
1029
- ExpectedVersion.none
1030
- )
933
+ repository.append_to_stream(events[200...400], Stream.new("Foo"), ExpectedVersion.none)
934
+ repository.append_to_stream(events[0...200], Stream.new("Dummy"), ExpectedVersion.none)
1031
935
 
1032
936
  batches = repository.read(specification.stream("Dummy").in_batches.result).to_a
1033
937
  expect(batches.size).to eq(2)
@@ -1037,11 +941,7 @@ module RubyEventStore
1037
941
 
1038
942
  specify do
1039
943
  events = Array.new(200) { SRecord.new }
1040
- repository.append_to_stream(
1041
- events,
1042
- Stream.new(GLOBAL_STREAM),
1043
- ExpectedVersion.any
1044
- )
944
+ repository.append_to_stream(events, Stream.new(GLOBAL_STREAM), ExpectedVersion.any)
1045
945
 
1046
946
  batches = repository.read(specification.in_batches.result).to_a
1047
947
  expect(batches.size).to eq(2)
@@ -1051,22 +951,14 @@ module RubyEventStore
1051
951
 
1052
952
  specify do
1053
953
  events = Array.new(200) { SRecord.new }
1054
- repository.append_to_stream(
1055
- events,
1056
- Stream.new(GLOBAL_STREAM),
1057
- ExpectedVersion.any
1058
- )
954
+ repository.append_to_stream(events, Stream.new(GLOBAL_STREAM), ExpectedVersion.any)
1059
955
 
1060
956
  expect(repository.read(specification.in_batches(200).result).to_a.size).to eq(1)
1061
957
  end
1062
958
 
1063
959
  specify do
1064
960
  events = Array.new(200) { SRecord.new }
1065
- repository.append_to_stream(
1066
- events,
1067
- Stream.new(GLOBAL_STREAM),
1068
- ExpectedVersion.any
1069
- )
961
+ repository.append_to_stream(events, Stream.new(GLOBAL_STREAM), ExpectedVersion.any)
1070
962
 
1071
963
  batches = repository.read(specification.limit(199).in_batches.result).to_a
1072
964
  expect(batches.size).to eq(2)
@@ -1078,11 +970,7 @@ module RubyEventStore
1078
970
 
1079
971
  specify do
1080
972
  events = Array.new(200) { SRecord.new }
1081
- repository.append_to_stream(
1082
- events,
1083
- Stream.new(GLOBAL_STREAM),
1084
- ExpectedVersion.any
1085
- )
973
+ repository.append_to_stream(events, Stream.new(GLOBAL_STREAM), ExpectedVersion.any)
1086
974
 
1087
975
  batches = repository.read(specification.limit(99).in_batches.result).to_a
1088
976
  expect(batches.size).to eq(1)
@@ -1092,11 +980,7 @@ module RubyEventStore
1092
980
 
1093
981
  specify do
1094
982
  events = Array.new(200) { SRecord.new }
1095
- repository.append_to_stream(
1096
- events,
1097
- Stream.new(GLOBAL_STREAM),
1098
- ExpectedVersion.any
1099
- )
983
+ repository.append_to_stream(events, Stream.new(GLOBAL_STREAM), ExpectedVersion.any)
1100
984
 
1101
985
  batches = repository.read(specification.backward.limit(99).in_batches.result).to_a
1102
986
  expect(batches.size).to eq(1)
@@ -1106,11 +990,7 @@ module RubyEventStore
1106
990
 
1107
991
  specify do
1108
992
  events = Array.new(200) { SRecord.new }
1109
- repository.append_to_stream(
1110
- events,
1111
- Stream.new(GLOBAL_STREAM),
1112
- ExpectedVersion.any
1113
- )
993
+ repository.append_to_stream(events, Stream.new(GLOBAL_STREAM), ExpectedVersion.any)
1114
994
 
1115
995
  batches = repository.read(specification.from(events[100].event_id).limit(99).in_batches.result).to_a
1116
996
  expect(batches.size).to eq(1)
@@ -1123,11 +1003,7 @@ module RubyEventStore
1123
1003
  expect(repository.read(specification.read_last.result)).to be_nil
1124
1004
 
1125
1005
  events = Array.new(5) { SRecord.new }
1126
- repository.append_to_stream(
1127
- events,
1128
- Stream.new(GLOBAL_STREAM),
1129
- ExpectedVersion.any
1130
- )
1006
+ repository.append_to_stream(events, Stream.new(GLOBAL_STREAM), ExpectedVersion.any)
1131
1007
 
1132
1008
  expect(repository.read(specification.stream("Any").read_first.result)).to be_nil
1133
1009
  expect(repository.read(specification.stream("Any").read_last.result)).to be_nil
@@ -1167,33 +1043,70 @@ module RubyEventStore
1167
1043
  specify "changes events" do
1168
1044
  skip unless helper.supports_upsert?
1169
1045
  events = Array.new(5) { SRecord.new }
1170
- repository.append_to_stream(
1171
- events[0..2],
1172
- Stream.new("whatever"),
1173
- ExpectedVersion.any
1046
+ repository.append_to_stream(events[0..2], Stream.new("whatever"), ExpectedVersion.any)
1047
+ repository.append_to_stream(events[3..4], Stream.new("elo"), ExpectedVersion.any)
1048
+ repository.update_messages(
1049
+ [
1050
+ a =
1051
+ SRecord.new(
1052
+ event_id: events[0].event_id.clone,
1053
+ data: events[0].data,
1054
+ metadata: events[0].metadata,
1055
+ event_type: events[0].event_type,
1056
+ timestamp: events[0].timestamp
1057
+ ),
1058
+ b =
1059
+ SRecord.new(
1060
+ event_id: events[1].event_id.dup,
1061
+ data: {
1062
+ "test" => 1
1063
+ },
1064
+ metadata: events[1].metadata,
1065
+ event_type: events[1].event_type,
1066
+ timestamp: events[1].timestamp
1067
+ ),
1068
+ c =
1069
+ SRecord.new(
1070
+ event_id: events[2].event_id,
1071
+ data: events[2].data,
1072
+ metadata: {
1073
+ "test" => 2
1074
+ },
1075
+ event_type: events[2].event_type,
1076
+ timestamp: events[2].timestamp
1077
+ ),
1078
+ d =
1079
+ SRecord.new(
1080
+ event_id: events[3].event_id.clone,
1081
+ data: events[3].data,
1082
+ metadata: events[3].metadata,
1083
+ event_type: "event_type3",
1084
+ timestamp: events[3].timestamp
1085
+ ),
1086
+ e =
1087
+ SRecord.new(
1088
+ event_id: events[4].event_id.dup,
1089
+ data: {
1090
+ "test" => 4
1091
+ },
1092
+ metadata: {
1093
+ "test" => 42
1094
+ },
1095
+ event_type: "event_type4",
1096
+ timestamp: events[4].timestamp
1097
+ )
1098
+ ]
1174
1099
  )
1175
- repository.append_to_stream(
1176
- events[3..4],
1177
- Stream.new("elo"),
1178
- ExpectedVersion.any
1179
- )
1180
- repository.update_messages([
1181
- a = SRecord.new(event_id: events[0].event_id.clone, data: events[0].data, metadata: events[0].metadata, event_type: events[0].event_type, timestamp: events[0].timestamp),
1182
- b = SRecord.new(event_id: events[1].event_id.dup, data: { "test" => 1 }, metadata: events[1].metadata, event_type: events[1].event_type, timestamp: events[1].timestamp),
1183
- c = SRecord.new(event_id: events[2].event_id, data: events[2].data, metadata: { "test" => 2 }, event_type: events[2].event_type, timestamp: events[2].timestamp),
1184
- d = SRecord.new(event_id: events[3].event_id.clone, data: events[3].data, metadata: events[3].metadata, event_type: "event_type3", timestamp: events[3].timestamp),
1185
- e = SRecord.new(event_id: events[4].event_id.dup, data: { "test" => 4 }, metadata: { "test" => 42 }, event_type: "event_type4", timestamp: events[4].timestamp),
1186
- ])
1187
-
1188
- expect(repository.read(specification.result).to_a).to eq([a,b,c,d,e])
1189
- expect(repository.read(specification.stream("whatever").result).to_a).to eq([a,b,c])
1190
- expect(repository.read(specification.stream("elo").result).to_a).to eq([d,e])
1100
+
1101
+ expect(repository.read(specification.result).to_a).to eq([a, b, c, d, e])
1102
+ expect(repository.read(specification.stream("whatever").result).to_a).to eq([a, b, c])
1103
+ expect(repository.read(specification.stream("elo").result).to_a).to eq([d, e])
1191
1104
  end
1192
1105
 
1193
1106
  specify "cannot change unexisting event" do
1194
1107
  skip unless helper.supports_upsert?
1195
1108
  e = SRecord.new
1196
- expect{ repository.update_messages([e]) }.to raise_error do |err|
1109
+ expect { repository.update_messages([e]) }.to raise_error do |err|
1197
1110
  expect(err).to be_a(EventNotFound)
1198
1111
  expect(err.event_id).to eq(e.event_id)
1199
1112
  expect(err.message).to eq("Event not found: #{e.event_id}")
@@ -1233,28 +1146,40 @@ module RubyEventStore
1233
1146
  stream = Stream.new("Stream A")
1234
1147
  repository.append_to_stream([e1, e2, e3], stream, version_any)
1235
1148
 
1236
- expect(repository.read(specification.with_id([
1237
- "8a6f053e-3ce2-4c82-a55b-4d02c66ae6ea"
1238
- ]).read_first.result)).to eq(e1)
1239
- expect(repository.read(specification.with_id([
1240
- "d345f86d-b903-4d78-803f-38990c078d9e"
1241
- ]).read_first.result)).to eq(e3)
1242
- expect(repository.read(specification.with_id([
1243
- "c31b327c-0da1-4178-a3cd-d2f6bb5d0688"
1244
- ]).read_first.result)).to eq(nil)
1245
- expect(repository.read(specification.with_id([
1246
- "8a6f053e-3ce2-4c82-a55b-4d02c66ae6ea",
1247
- "d345f86d-b903-4d78-803f-38990c078d9e"
1248
- ]).in_batches.result).to_a[0]).to eq([e1,e3])
1249
- expect(repository.read(specification.stream("Stream A").with_id([
1250
- "8cee1139-4f96-483a-a175-2b947283c3c7"
1251
- ]).read_first.result)).to eq(e2)
1252
- expect(repository.read(specification.stream("Stream B").with_id([
1253
- "8cee1139-4f96-483a-a175-2b947283c3c7"
1254
- ]).read_first.result)).to eq(nil)
1255
- expect(repository.read(specification.stream("Stream B").with_id([
1256
- "c31b327c-0da1-4178-a3cd-d2f6bb5d0688"
1257
- ]).read_first.result)).to eq(nil)
1149
+ expect(repository.read(specification.with_id(["8a6f053e-3ce2-4c82-a55b-4d02c66ae6ea"]).read_first.result)).to eq(
1150
+ e1
1151
+ )
1152
+ expect(repository.read(specification.with_id(["d345f86d-b903-4d78-803f-38990c078d9e"]).read_first.result)).to eq(
1153
+ e3
1154
+ )
1155
+ expect(repository.read(specification.with_id(["c31b327c-0da1-4178-a3cd-d2f6bb5d0688"]).read_first.result)).to eq(
1156
+ nil
1157
+ )
1158
+ expect(
1159
+ repository.read(
1160
+ specification
1161
+ .with_id(%w[8a6f053e-3ce2-4c82-a55b-4d02c66ae6ea d345f86d-b903-4d78-803f-38990c078d9e])
1162
+ .in_batches
1163
+ .result
1164
+ ).to_a[
1165
+ 0
1166
+ ]
1167
+ ).to eq([e1, e3])
1168
+ expect(
1169
+ repository.read(
1170
+ specification.stream("Stream A").with_id(["8cee1139-4f96-483a-a175-2b947283c3c7"]).read_first.result
1171
+ )
1172
+ ).to eq(e2)
1173
+ expect(
1174
+ repository.read(
1175
+ specification.stream("Stream B").with_id(["8cee1139-4f96-483a-a175-2b947283c3c7"]).read_first.result
1176
+ )
1177
+ ).to eq(nil)
1178
+ expect(
1179
+ repository.read(
1180
+ specification.stream("Stream B").with_id(["c31b327c-0da1-4178-a3cd-d2f6bb5d0688"]).read_first.result
1181
+ )
1182
+ ).to eq(nil)
1258
1183
  expect(repository.read(specification.with_id([]).result).to_a).to eq([])
1259
1184
  end
1260
1185
 
@@ -1265,20 +1190,18 @@ module RubyEventStore
1265
1190
  stream = Stream.new("Stream A")
1266
1191
  repository.append_to_stream([e1, e2, e3], stream, version_any)
1267
1192
 
1268
- expect(repository.read(specification.of_type([Type1]).result).to_a).to eq([e1,e3])
1193
+ expect(repository.read(specification.of_type([Type1]).result).to_a).to eq([e1, e3])
1269
1194
  expect(repository.read(specification.of_type([Type2]).result).to_a).to eq([e2])
1270
1195
  expect(repository.read(specification.of_type([Type3]).result).to_a).to eq([])
1271
- expect(repository.read(specification.of_type([Type1, Type2, Type3]).result).to_a).to eq([e1,e2,e3])
1196
+ expect(repository.read(specification.of_type([Type1, Type2, Type3]).result).to_a).to eq([e1, e2, e3])
1272
1197
  end
1273
1198
 
1274
1199
  specify do
1275
1200
  stream = Stream.new("Stream A")
1276
- dummy = Stream.new("Dummy")
1201
+ dummy = Stream.new("Dummy")
1277
1202
 
1278
1203
  expect(repository.count(specification.result)).to eq(0)
1279
- (1..3).each do
1280
- repository.append_to_stream([SRecord.new(event_type: Type1.to_s)], stream, version_any)
1281
- end
1204
+ (1..3).each { repository.append_to_stream([SRecord.new(event_type: Type1.to_s)], stream, version_any) }
1282
1205
  expect(repository.count(specification.result)).to eq(3)
1283
1206
  event_id = SecureRandom.uuid
1284
1207
  repository.append_to_stream([SRecord.new(event_type: Type1.to_s, event_id: event_id)], dummy, version_any)
@@ -1313,7 +1236,7 @@ module RubyEventStore
1313
1236
  end
1314
1237
 
1315
1238
  specify "timestamp precision" do
1316
- time = Time.utc(2020, 9, 11, 12, 26, 0, 123456)
1239
+ time = Time.utc(2020, 9, 11, 12, 26, 0, 123_456)
1317
1240
  repository.append_to_stream([SRecord.new(timestamp: time)], stream, version_none)
1318
1241
  event = read_events_forward(repository, count: 1).first
1319
1242
 
@@ -1326,7 +1249,9 @@ module RubyEventStore
1326
1249
  event_3 = SRecord.new(event_id: "d345f86d-b903-4d78-803f-38990c078d9e", timestamp: Time.utc(2020, 1, 3))
1327
1250
  repository.append_to_stream([event_1, event_2, event_3], Stream.new("whatever"), version_any)
1328
1251
 
1329
- expect(repository.read(specification.stream("whatever").older_than(Time.utc(2020, 1, 2)).result).to_a).to eq([event_1])
1252
+ expect(repository.read(specification.stream("whatever").older_than(Time.utc(2020, 1, 2)).result).to_a).to eq(
1253
+ [event_1]
1254
+ )
1330
1255
  end
1331
1256
 
1332
1257
  specify "fetching records older than or equal to specified date in stream" do
@@ -1335,7 +1260,9 @@ module RubyEventStore
1335
1260
  event_3 = SRecord.new(event_id: "d345f86d-b903-4d78-803f-38990c078d9e", timestamp: Time.utc(2020, 1, 3))
1336
1261
  repository.append_to_stream([event_1, event_2, event_3], Stream.new("whatever"), version_any)
1337
1262
 
1338
- expect(repository.read(specification.stream("whatever").older_than_or_equal(Time.utc(2020, 1, 2)).result).to_a).to eq([event_1, event_2])
1263
+ expect(
1264
+ repository.read(specification.stream("whatever").older_than_or_equal(Time.utc(2020, 1, 2)).result).to_a
1265
+ ).to eq([event_1, event_2])
1339
1266
  end
1340
1267
 
1341
1268
  specify "fetching records newer than specified date in stream" do
@@ -1344,7 +1271,9 @@ module RubyEventStore
1344
1271
  event_3 = SRecord.new(event_id: "d345f86d-b903-4d78-803f-38990c078d9e", timestamp: Time.utc(2020, 1, 3))
1345
1272
  repository.append_to_stream([event_1, event_2, event_3], Stream.new("whatever"), version_any)
1346
1273
 
1347
- expect(repository.read(specification.stream("whatever").newer_than(Time.utc(2020, 1, 2)).result).to_a).to eq([event_3])
1274
+ expect(repository.read(specification.stream("whatever").newer_than(Time.utc(2020, 1, 2)).result).to_a).to eq(
1275
+ [event_3]
1276
+ )
1348
1277
  end
1349
1278
 
1350
1279
  specify "fetching records newer than or equal to specified date in stream" do
@@ -1353,7 +1282,9 @@ module RubyEventStore
1353
1282
  event_3 = SRecord.new(event_id: "d345f86d-b903-4d78-803f-38990c078d9e", timestamp: Time.utc(2020, 1, 3))
1354
1283
  repository.append_to_stream([event_1, event_2, event_3], Stream.new("whatever"), version_any)
1355
1284
 
1356
- expect(repository.read(specification.stream("whatever").newer_than_or_equal(Time.utc(2020, 1, 2)).result).to_a).to eq([event_2, event_3])
1285
+ expect(
1286
+ repository.read(specification.stream("whatever").newer_than_or_equal(Time.utc(2020, 1, 2)).result).to_a
1287
+ ).to eq([event_2, event_3])
1357
1288
  end
1358
1289
 
1359
1290
  specify "fetching records older than specified date" do
@@ -1371,7 +1302,9 @@ module RubyEventStore
1371
1302
  event_3 = SRecord.new(event_id: "d345f86d-b903-4d78-803f-38990c078d9e", timestamp: Time.utc(2020, 1, 3))
1372
1303
  repository.append_to_stream([event_1, event_2, event_3], Stream.new("whatever"), version_any)
1373
1304
 
1374
- expect(repository.read(specification.older_than_or_equal(Time.utc(2020, 1, 2)).result).to_a).to eq([event_1, event_2])
1305
+ expect(repository.read(specification.older_than_or_equal(Time.utc(2020, 1, 2)).result).to_a).to eq(
1306
+ [event_1, event_2]
1307
+ )
1375
1308
  end
1376
1309
 
1377
1310
  specify "fetching records newer than specified date" do
@@ -1389,7 +1322,9 @@ module RubyEventStore
1389
1322
  event_3 = SRecord.new(event_id: "d345f86d-b903-4d78-803f-38990c078d9e", timestamp: Time.utc(2020, 1, 3))
1390
1323
  repository.append_to_stream([event_1, event_2, event_3], Stream.new("whatever"), version_any)
1391
1324
 
1392
- expect(repository.read(specification.newer_than_or_equal(Time.utc(2020, 1, 2)).result).to_a).to eq([event_2, event_3])
1325
+ expect(repository.read(specification.newer_than_or_equal(Time.utc(2020, 1, 2)).result).to_a).to eq(
1326
+ [event_2, event_3]
1327
+ )
1393
1328
  end
1394
1329
 
1395
1330
  specify "fetching records from disjoint periods" do
@@ -1398,7 +1333,9 @@ module RubyEventStore
1398
1333
  event_3 = SRecord.new(event_id: "d345f86d-b903-4d78-803f-38990c078d9e", timestamp: Time.utc(2020, 1, 3))
1399
1334
  repository.append_to_stream([event_1, event_2, event_3], Stream.new("whatever"), version_any)
1400
1335
 
1401
- expect(repository.read(specification.older_than(Time.utc(2020, 1, 2)).newer_than(Time.utc(2020, 1, 2)).result).to_a).to eq([])
1336
+ expect(
1337
+ repository.read(specification.older_than(Time.utc(2020, 1, 2)).newer_than(Time.utc(2020, 1, 2)).result).to_a
1338
+ ).to eq([])
1402
1339
  end
1403
1340
 
1404
1341
  specify "fetching records within time range" do
@@ -1407,38 +1344,58 @@ module RubyEventStore
1407
1344
  event_3 = SRecord.new(event_id: "d345f86d-b903-4d78-803f-38990c078d9e", timestamp: Time.utc(2020, 1, 3))
1408
1345
  repository.append_to_stream([event_1, event_2, event_3], Stream.new("whatever"), version_any)
1409
1346
 
1410
- expect(repository.read(specification.between(Time.utc(2020, 1, 1)...Time.utc(2020, 1, 3)).result).to_a).to eq([event_1, event_2])
1347
+ expect(repository.read(specification.between(Time.utc(2020, 1, 1)...Time.utc(2020, 1, 3)).result).to_a).to eq(
1348
+ [event_1, event_2]
1349
+ )
1411
1350
  end
1412
1351
 
1413
1352
  specify "time order is respected" do
1414
- repository.append_to_stream([
1415
- SRecord.new(event_id: e1 = SecureRandom.uuid, timestamp: Time.new(2020,1,1), valid_at: Time.new(2020,1,9)),
1416
- SRecord.new(event_id: e2 = SecureRandom.uuid, timestamp: Time.new(2020,1,3), valid_at: Time.new(2020,1,6)),
1417
- SRecord.new(event_id: e3 = SecureRandom.uuid, timestamp: Time.new(2020,1,2), valid_at: Time.new(2020,1,3)),
1353
+ repository.append_to_stream(
1354
+ [
1355
+ SRecord.new(
1356
+ event_id: e1 = SecureRandom.uuid,
1357
+ timestamp: Time.new(2020, 1, 1),
1358
+ valid_at: Time.new(2020, 1, 9)
1359
+ ),
1360
+ SRecord.new(
1361
+ event_id: e2 = SecureRandom.uuid,
1362
+ timestamp: Time.new(2020, 1, 3),
1363
+ valid_at: Time.new(2020, 1, 6)
1364
+ ),
1365
+ SRecord.new(event_id: e3 = SecureRandom.uuid, timestamp: Time.new(2020, 1, 2), valid_at: Time.new(2020, 1, 3))
1418
1366
  ],
1419
1367
  Stream.new("Dummy"),
1420
1368
  ExpectedVersion.any
1421
1369
  )
1422
- expect(repository.read(specification.result)).to eq_ids([e1, e2, e3])
1423
- expect(repository.read(specification.as_at.result)).to eq_ids([e1, e3, e2])
1370
+ expect(repository.read(specification.result)).to eq_ids([e1, e2, e3])
1371
+ expect(repository.read(specification.as_at.result)).to eq_ids([e1, e3, e2])
1424
1372
  expect(repository.read(specification.as_at.backward.result)).to eq_ids([e2, e3, e1])
1425
- expect(repository.read(specification.as_of.result)).to eq_ids([e3, e2, e1])
1373
+ expect(repository.read(specification.as_of.result)).to eq_ids([e3, e2, e1])
1426
1374
  expect(repository.read(specification.as_of.backward.result)).to eq_ids([e1, e2, e3])
1427
1375
  end
1428
1376
 
1429
1377
  specify "time order is respected with batches" do
1430
- repository.append_to_stream([
1431
- SRecord.new(event_id: e1 = SecureRandom.uuid, timestamp: Time.new(2020,1,1), valid_at: Time.new(2020,1,9)),
1432
- SRecord.new(event_id: e2 = SecureRandom.uuid, timestamp: Time.new(2020,1,3), valid_at: Time.new(2020,1,6)),
1433
- SRecord.new(event_id: e3 = SecureRandom.uuid, timestamp: Time.new(2020,1,2), valid_at: Time.new(2020,1,3)),
1434
- ],
1378
+ repository.append_to_stream(
1379
+ [
1380
+ SRecord.new(
1381
+ event_id: e1 = SecureRandom.uuid,
1382
+ timestamp: Time.new(2020, 1, 1),
1383
+ valid_at: Time.new(2020, 1, 9)
1384
+ ),
1385
+ SRecord.new(
1386
+ event_id: e2 = SecureRandom.uuid,
1387
+ timestamp: Time.new(2020, 1, 3),
1388
+ valid_at: Time.new(2020, 1, 6)
1389
+ ),
1390
+ SRecord.new(event_id: e3 = SecureRandom.uuid, timestamp: Time.new(2020, 1, 2), valid_at: Time.new(2020, 1, 3))
1391
+ ],
1435
1392
  Stream.new("Dummy"),
1436
1393
  ExpectedVersion.any
1437
1394
  )
1438
- expect(repository.read(specification.in_batches.result).to_a.flatten).to eq_ids([e1, e2, e3])
1439
- expect(repository.read(specification.in_batches.as_at.result).to_a.flatten).to eq_ids([e1, e3, e2])
1395
+ expect(repository.read(specification.in_batches.result).to_a.flatten).to eq_ids([e1, e2, e3])
1396
+ expect(repository.read(specification.in_batches.as_at.result).to_a.flatten).to eq_ids([e1, e3, e2])
1440
1397
  expect(repository.read(specification.in_batches.as_at.backward.result).to_a.flatten).to eq_ids([e2, e3, e1])
1441
- expect(repository.read(specification.in_batches.as_of.result).to_a.flatten).to eq_ids([e3, e2, e1])
1398
+ expect(repository.read(specification.in_batches.as_of.result).to_a.flatten).to eq_ids([e3, e2, e1])
1442
1399
  expect(repository.read(specification.in_batches.as_of.backward.result).to_a.flatten).to eq_ids([e1, e2, e3])
1443
1400
  end
1444
1401
  end