ruby_event_store 1.2.0 → 2.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. checksums.yaml +4 -4
  2. data/.mutant.yml +1 -0
  3. data/Gemfile +3 -4
  4. data/Gemfile.lock +118 -0
  5. data/Makefile +13 -3
  6. data/lib/ruby_event_store.rb +4 -7
  7. data/lib/ruby_event_store/broker.rb +3 -3
  8. data/lib/ruby_event_store/client.rb +47 -23
  9. data/lib/ruby_event_store/composed_dispatcher.rb +2 -2
  10. data/lib/ruby_event_store/constants.rb +1 -0
  11. data/lib/ruby_event_store/errors.rb +0 -1
  12. data/lib/ruby_event_store/event.rb +8 -1
  13. data/lib/ruby_event_store/immediate_async_dispatcher.rb +2 -2
  14. data/lib/ruby_event_store/in_memory_repository.rb +98 -58
  15. data/lib/ruby_event_store/instrumented_dispatcher.rb +2 -2
  16. data/lib/ruby_event_store/mappers/default.rb +28 -6
  17. data/lib/ruby_event_store/mappers/deprecated_wrapper.rb +33 -0
  18. data/lib/ruby_event_store/mappers/encryption_mapper.rb +1 -4
  19. data/lib/ruby_event_store/mappers/instrumented_mapper.rb +8 -4
  20. data/lib/ruby_event_store/mappers/json_mapper.rb +2 -4
  21. data/lib/ruby_event_store/mappers/pipeline.rb +26 -5
  22. data/lib/ruby_event_store/mappers/pipeline_mapper.rb +6 -2
  23. data/lib/ruby_event_store/mappers/transformation/domain_event.rb +16 -8
  24. data/lib/ruby_event_store/mappers/transformation/encryption.rb +22 -13
  25. data/lib/ruby_event_store/mappers/transformation/event_class_remapper.rb +11 -4
  26. data/lib/ruby_event_store/mappers/transformation/serialization.rb +16 -14
  27. data/lib/ruby_event_store/mappers/transformation/stringify_metadata_keys.rb +12 -7
  28. data/lib/ruby_event_store/mappers/transformation/symbolize_metadata_keys.rb +12 -7
  29. data/lib/ruby_event_store/null.rb +13 -0
  30. data/lib/ruby_event_store/projection.rb +2 -1
  31. data/lib/ruby_event_store/record.rb +68 -0
  32. data/lib/ruby_event_store/serialized_record.rb +23 -4
  33. data/lib/ruby_event_store/spec/broker_lint.rb +9 -9
  34. data/lib/ruby_event_store/spec/event_repository_lint.rb +200 -36
  35. data/lib/ruby_event_store/spec/mapper_lint.rb +6 -6
  36. data/lib/ruby_event_store/spec/subscriptions_lint.rb +6 -0
  37. data/lib/ruby_event_store/specification.rb +100 -7
  38. data/lib/ruby_event_store/specification_reader.rb +2 -2
  39. data/lib/ruby_event_store/specification_result.rb +86 -2
  40. data/lib/ruby_event_store/version.rb +1 -1
  41. data/ruby_event_store.gemspec +0 -2
  42. metadata +8 -9
  43. data/lib/ruby_event_store/mappers/protobuf.rb +0 -24
  44. data/lib/ruby_event_store/mappers/transformation/item.rb +0 -56
  45. data/lib/ruby_event_store/mappers/transformation/proto_event.rb +0 -17
  46. data/lib/ruby_event_store/mappers/transformation/protobuf_encoder.rb +0 -30
  47. data/lib/ruby_event_store/mappers/transformation/protobuf_nested_struct_metadata.rb +0 -30
  48. data/lib/ruby_event_store/mappers/transformation/serialized_record.rb +0 -27
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6b30f1a52e6c803267914de53968b2885b7262c96f86e8399749ffcf189ad967
4
- data.tar.gz: 9aa5d056ace06dec409e292e5562b3c6b177cdc4fceec2b98f1f936807b403cf
3
+ metadata.gz: 77b3c759168136d4561f31896e30f54235b776eef2cdc55e4ff9cd20a3be358a
4
+ data.tar.gz: a0c24622bea13420b8d86296c5134c4f111b62b8dd98c6a7e44cabe31c078df8
5
5
  SHA512:
6
- metadata.gz: f953e8453922bbc437efafab4716533172d1e1c4c14d0c9ed3c426b569ef4b415edb9095ec95fa47ca70dd92412ab57489111f8d22e216a20033fc838b2bf4e9
7
- data.tar.gz: b5ff8f63294fe88bcfe982ec494989c30f1748926990a68310a629b8eaa3c15b995c5ec015c373512c6f1ff3a6f46773d3f1c0f3a4a00b219fdb744f624c6ede
6
+ metadata.gz: c07ceec80434073252f31fde65892d9e1a8a57dfcdc9b724d34896f7cb880772c63e78cd317d588f43430140175b75da23812b16540fb839d6280a78fc7a6892
7
+ data.tar.gz: 6b3dc9b3e487d3b296c122b49da713a1eca731050b6b0e17cb66927e0d675f424417e60027e83d2a8814939be2186df40388154b6ed440b2b0e2ecdb1e2e17fc
@@ -0,0 +1 @@
1
+ ../.mutant.yml
data/Gemfile CHANGED
@@ -3,8 +3,7 @@ git_source(:github) { |repo| "https://github.com/#{repo}.git" }
3
3
 
4
4
  gemspec
5
5
 
6
- eval_gemfile File.expand_path('../support/bundler/Gemfile.shared', __dir__)
6
+ eval_gemfile '../support/bundler/Gemfile.shared'
7
7
 
8
- gem 'protobuf_nested_struct'
9
- gem 'google-protobuf', '~> 3.12.2', '>= 3.12.2'
10
- gem 'activesupport', '~> 5.0'
8
+ gem 'activesupport', '6.0.3.4'
9
+ gem 'concurrent-ruby', github: 'ruby-concurrency/concurrent-ruby', ref: 'c4cbc968c55e5b983dae953095761896220c46d1'
@@ -0,0 +1,118 @@
1
+ GIT
2
+ remote: https://github.com/ruby-concurrency/concurrent-ruby.git
3
+ revision: c4cbc968c55e5b983dae953095761896220c46d1
4
+ ref: c4cbc968c55e5b983dae953095761896220c46d1
5
+ specs:
6
+ concurrent-ruby (1.1.7)
7
+
8
+ PATH
9
+ remote: .
10
+ specs:
11
+ ruby_event_store (2.0.1)
12
+ concurrent-ruby (~> 1.0, >= 1.1.6)
13
+
14
+ GEM
15
+ remote: https://rubygems.org/
16
+ remote: https://oss:7AXfeZdAfCqL1PvHm2nvDJO6Zd9UW8IK@gem.mutant.dev/
17
+ specs:
18
+ abstract_type (0.0.7)
19
+ activesupport (6.0.3.4)
20
+ concurrent-ruby (~> 1.0, >= 1.0.2)
21
+ i18n (>= 0.7, < 2)
22
+ minitest (~> 5.1)
23
+ tzinfo (~> 1.1)
24
+ zeitwerk (~> 2.2, >= 2.2.2)
25
+ adamantium (0.2.0)
26
+ ice_nine (~> 0.11.0)
27
+ memoizable (~> 0.4.0)
28
+ anima (0.3.2)
29
+ abstract_type (~> 0.0.7)
30
+ adamantium (~> 0.2)
31
+ equalizer (~> 0.0.11)
32
+ ast (2.4.1)
33
+ concord (0.1.6)
34
+ adamantium (~> 0.2.0)
35
+ equalizer (~> 0.0.9)
36
+ diff-lcs (1.4.4)
37
+ equalizer (0.0.11)
38
+ i18n (1.8.5)
39
+ concurrent-ruby (~> 1.0)
40
+ ice_nine (0.11.2)
41
+ memoizable (0.4.2)
42
+ thread_safe (~> 0.3, >= 0.3.1)
43
+ minitest (5.14.2)
44
+ mprelude (0.1.0)
45
+ abstract_type (~> 0.0.7)
46
+ adamantium (~> 0.2.0)
47
+ concord (~> 0.1.5)
48
+ equalizer (~> 0.0.9)
49
+ ice_nine (~> 0.11.1)
50
+ procto (~> 0.0.2)
51
+ mutant (0.10.22)
52
+ abstract_type (~> 0.0.7)
53
+ adamantium (~> 0.2.0)
54
+ anima (~> 0.3.1)
55
+ ast (~> 2.2)
56
+ concord (~> 0.1.5)
57
+ diff-lcs (~> 1.3)
58
+ equalizer (~> 0.0.9)
59
+ ice_nine (~> 0.11.1)
60
+ memoizable (~> 0.4.2)
61
+ mprelude (~> 0.1.0)
62
+ parser (~> 3.0.0)
63
+ procto (~> 0.0.2)
64
+ unparser (~> 0.5.6)
65
+ variable (~> 0.0.1)
66
+ mutant-license (0.1.1.2.1627430819213747598431630701693729869473.0)
67
+ mutant-rspec (0.10.22)
68
+ mutant (= 0.10.22)
69
+ rspec-core (>= 3.8.0, < 4.0.0)
70
+ parser (3.0.0.0)
71
+ ast (~> 2.4.1)
72
+ procto (0.0.3)
73
+ rake (13.0.3)
74
+ rspec (3.10.0)
75
+ rspec-core (~> 3.10.0)
76
+ rspec-expectations (~> 3.10.0)
77
+ rspec-mocks (~> 3.10.0)
78
+ rspec-core (3.10.1)
79
+ rspec-support (~> 3.10.0)
80
+ rspec-expectations (3.10.1)
81
+ diff-lcs (>= 1.2.0, < 2.0)
82
+ rspec-support (~> 3.10.0)
83
+ rspec-mocks (3.10.1)
84
+ diff-lcs (>= 1.2.0, < 2.0)
85
+ rspec-support (~> 3.10.0)
86
+ rspec-support (3.10.1)
87
+ thread_safe (0.3.6)
88
+ tzinfo (1.2.9)
89
+ thread_safe (~> 0.1)
90
+ unparser (0.5.6)
91
+ abstract_type (~> 0.0.7)
92
+ adamantium (~> 0.2.0)
93
+ anima (~> 0.3.1)
94
+ concord (~> 0.1.5)
95
+ diff-lcs (~> 1.3)
96
+ equalizer (~> 0.0.9)
97
+ mprelude (~> 0.1.0)
98
+ parser (>= 3.0.0)
99
+ procto (~> 0.0.2)
100
+ variable (0.0.1)
101
+ equalizer (~> 0.0.11)
102
+ zeitwerk (2.4.2)
103
+
104
+ PLATFORMS
105
+ ruby
106
+
107
+ DEPENDENCIES
108
+ activesupport (= 6.0.3.4)
109
+ concurrent-ruby!
110
+ mutant (~> 0.10.21)
111
+ mutant-license!
112
+ mutant-rspec (~> 0.10.21)
113
+ rake (>= 10.0)
114
+ rspec (~> 3.6)
115
+ ruby_event_store!
116
+
117
+ BUNDLED WITH
118
+ 2.1.4
data/Makefile CHANGED
@@ -1,17 +1,27 @@
1
1
  GEM_VERSION = $(shell cat ../RES_VERSION)
2
2
  GEM_NAME = ruby_event_store
3
3
  REQUIRE = $(GEM_NAME)
4
- IGNORE = RubyEventStore::InMemoryRepository\#append_with_synchronize \
4
+ IGNORE = RubyEventStore::InMemoryRepository\#with_synchronize \
5
+ RubyEventStore::Client\#initialize \
6
+ RubyEventStore::Client\#default_clock \
7
+ RubyEventStore::Client\#default_correlation_id_generator \
5
8
  RubyEventStore::Client::Within\#add_thread_subscribers \
6
9
  RubyEventStore::Client::Within\#add_thread_global_subscribers \
7
10
  RubyEventStore::Client::Within\#call \
8
- RubyEventStore::Client\#default_correlation_id_generator \
9
11
  RubyEventStore::Mappers::InMemoryEncryptionKeyRepository\#prepare_encrypt \
10
12
  RubyEventStore::Mappers::EncryptionKey\#prepare_encrypt \
11
13
  RubyEventStore::Mappers::EncryptionKey\#prepare_decrypt \
12
14
  RubyEventStore::Mappers::EncryptionKey\#prepare_auth_data \
13
15
  RubyEventStore::Mappers::EncryptionKey\#encrypt_authenticated \
14
- RubyEventStore::Mappers::EncryptionKey\#ciphertext_from_authenticated
16
+ RubyEventStore::Mappers::EncryptionKey\#ciphertext_from_authenticated \
17
+ RubyEventStore::Mappers::Default\#serializer \
18
+ RubyEventStore::Mappers::JSONMapper\#serializer \
19
+ RubyEventStore::Mappers::NullMapper\#serializer \
20
+ RubyEventStore::Mappers::EncryptionMapper\#serializer \
21
+ RubyEventStore::Mappers::PipelineMapper\#serializer \
22
+ RubyEventStore::Mappers::DeprecatedWrapper\#serializer \
23
+ RubyEventStore::Mappers::InstrumentedMapper\#serializer \
24
+ RubyEventStore::Mappers::Transformation::Serialization*
15
25
 
16
26
  SUBJECT ?= RubyEventStore*
17
27
 
@@ -15,30 +15,27 @@ require 'ruby_event_store/specification_reader'
15
15
  require 'ruby_event_store/event'
16
16
  require 'ruby_event_store/stream'
17
17
  require 'ruby_event_store/expected_version'
18
+ require 'ruby_event_store/record'
18
19
  require 'ruby_event_store/serialized_record'
20
+ require 'ruby_event_store/null'
19
21
  require 'ruby_event_store/transform_keys'
20
22
  require 'ruby_event_store/mappers/encryption_key'
21
23
  require 'ruby_event_store/mappers/in_memory_encryption_key_repository'
22
24
  require 'ruby_event_store/mappers/transformation/domain_event'
23
25
  require 'ruby_event_store/mappers/transformation/encryption'
24
26
  require 'ruby_event_store/mappers/transformation/event_class_remapper'
25
- require 'ruby_event_store/mappers/transformation/item'
26
- require 'ruby_event_store/mappers/transformation/proto_event'
27
- require 'ruby_event_store/mappers/transformation/protobuf_encoder'
28
- require 'ruby_event_store/mappers/transformation/protobuf_nested_struct_metadata'
29
- require 'ruby_event_store/mappers/transformation/serialization'
30
- require 'ruby_event_store/mappers/transformation/serialized_record'
31
27
  require 'ruby_event_store/mappers/transformation/stringify_metadata_keys'
32
28
  require 'ruby_event_store/mappers/transformation/symbolize_metadata_keys'
29
+ require 'ruby_event_store/mappers/transformation/serialization'
33
30
  require 'ruby_event_store/mappers/pipeline'
34
31
  require 'ruby_event_store/mappers/pipeline_mapper'
32
+ require 'ruby_event_store/mappers/deprecated_wrapper'
35
33
  require 'ruby_event_store/mappers/default'
36
34
  require 'ruby_event_store/mappers/forgotten_data'
37
35
  require 'ruby_event_store/mappers/encryption_mapper'
38
36
  require 'ruby_event_store/mappers/instrumented_mapper'
39
37
  require 'ruby_event_store/mappers/json_mapper'
40
38
  require 'ruby_event_store/mappers/null_mapper'
41
- require 'ruby_event_store/mappers/protobuf'
42
39
  require 'ruby_event_store/batch_enumerator'
43
40
  require 'ruby_event_store/correlated_commands'
44
41
  require 'ruby_event_store/link_by_metadata'
@@ -7,10 +7,10 @@ module RubyEventStore
7
7
  @dispatcher = dispatcher
8
8
  end
9
9
 
10
- def call(event, serialized_event)
10
+ def call(event, record)
11
11
  subscribers = subscriptions.all_for(event.event_type)
12
12
  subscribers.each do |subscriber|
13
- dispatcher.call(subscriber, event, serialized_event)
13
+ dispatcher.call(subscriber, event, record)
14
14
  end
15
15
  end
16
16
 
@@ -35,7 +35,7 @@ module RubyEventStore
35
35
  end
36
36
 
37
37
  private
38
- attr_reader :subscriptions, :dispatcher
38
+ attr_reader :dispatcher, :subscriptions
39
39
 
40
40
  def verify_subscription(subscriber)
41
41
  raise SubscriberNotExist, "subscriber must be first argument or block" unless subscriber
@@ -10,8 +10,11 @@ module RubyEventStore
10
10
  dispatcher: Dispatcher.new,
11
11
  clock: default_clock,
12
12
  correlation_id_generator: default_correlation_id_generator)
13
+
14
+
13
15
  @repository = repository
14
- @mapper = mapper
16
+ @mapper = Mappers::DeprecatedWrapper.new(mapper)
17
+ @subscriptions = subscriptions
15
18
  @broker = Broker.new(subscriptions: subscriptions, dispatcher: dispatcher)
16
19
  @clock = clock
17
20
  @metadata = Concurrent::ThreadLocalVar.new
@@ -21,20 +24,20 @@ module RubyEventStore
21
24
 
22
25
  # Persists events and notifies subscribed handlers about them
23
26
  #
24
- # @param events [Array<Event, Proto>, Event, Proto] event(s)
27
+ # @param events [Array<Event>, Event] event(s)
25
28
  # @param stream_name [String] name of the stream for persisting events.
26
29
  # @param expected_version [:any, :auto, :none, Integer] controls optimistic locking strategy. {http://railseventstore.org/docs/expected_version/ Read more}
27
30
  # @return [self]
28
31
  def publish(events, stream_name: GLOBAL_STREAM, expected_version: :any)
29
32
  enriched_events = enrich_events_metadata(events)
30
- serialized_events = serialize_events(enriched_events)
31
- append_to_stream_serialized_events(serialized_events, stream_name: stream_name, expected_version: expected_version)
32
- enriched_events.zip(serialized_events) do |event, serialized_event|
33
+ records = transform(enriched_events)
34
+ append_records_to_stream(records, stream_name: stream_name, expected_version: expected_version)
35
+ enriched_events.zip(records) do |event, record|
33
36
  with_metadata(
34
37
  correlation_id: event.metadata.fetch(:correlation_id),
35
38
  causation_id: event.event_id,
36
39
  ) do
37
- broker.(event, serialized_event)
40
+ broker.(event, record)
38
41
  end
39
42
  end
40
43
  self
@@ -45,8 +48,11 @@ module RubyEventStore
45
48
  # @param (see #publish)
46
49
  # @return [self]
47
50
  def append(events, stream_name: GLOBAL_STREAM, expected_version: :any)
48
- serialized_events = serialize_events(enrich_events_metadata(events))
49
- append_to_stream_serialized_events(serialized_events, stream_name: stream_name, expected_version: expected_version)
51
+ append_records_to_stream(
52
+ transform(enrich_events_metadata(events)),
53
+ stream_name: stream_name,
54
+ expected_version: expected_version
55
+ )
50
56
  self
51
57
  end
52
58
 
@@ -121,6 +127,14 @@ module RubyEventStore
121
127
  broker.add_global_subscription(subscriber || proc)
122
128
  end
123
129
 
130
+ # Get list of handlers subscribed to an event
131
+ #
132
+ # @param to [Class, String] type of events to get list of sybscribed handlers
133
+ # @return [Array<Object, Class>]
134
+ def subscribers_for(event_type)
135
+ subscriptions.all_for(event_type.to_s)
136
+ end
137
+
124
138
  # Builder object for collecting temporary handlers (subscribers)
125
139
  # which are active only during the invocation of the provided
126
140
  # block of code.
@@ -222,9 +236,22 @@ module RubyEventStore
222
236
  # Deserialize event which was serialized for async event handlers
223
237
  # {http://railseventstore.org/docs/subscribe/#async-handlers Read more}
224
238
  #
225
- # @return [Event, Proto] deserialized event
226
- def deserialize(event_type:, event_id:, data:, metadata:)
227
- mapper.serialized_record_to_event(SerializedRecord.new(event_type: event_type, event_id: event_id, data: data, metadata: metadata))
239
+ # @return [Event] deserialized event
240
+ def deserialize(serializer:, event_type:, event_id:, data:, metadata:, timestamp: nil, valid_at: nil)
241
+ extract_timestamp = lambda do |m|
242
+ (m[:timestamp] || Time.parse(m.fetch('timestamp'))).iso8601
243
+ end
244
+
245
+ mapper.record_to_event(
246
+ SerializedRecord.new(
247
+ event_type: event_type,
248
+ event_id: event_id,
249
+ data: data,
250
+ metadata: metadata,
251
+ timestamp: timestamp || timestamp_ = extract_timestamp[serializer.load(metadata)],
252
+ valid_at: valid_at || timestamp_,
253
+ ).deserialize(serializer)
254
+ )
228
255
  end
229
256
 
230
257
  # Read additional metadata which will be added for published events
@@ -262,12 +289,10 @@ module RubyEventStore
262
289
  # end
263
290
  # event_store.overwrite(events)
264
291
  #
265
- # @param events [Array<Event, Proto>, Event, Proto] event(s) to serialize and overwrite again
292
+ # @param events [Array<Event>, Event] event(s) to serialize and overwrite again
266
293
  # @return [self]
267
294
  def overwrite(events_or_event)
268
- events = Array(events_or_event)
269
- serialized_events = serialize_events(events)
270
- repository.update_messages(serialized_events)
295
+ repository.update_messages(transform(Array(events_or_event)))
271
296
  self
272
297
  end
273
298
 
@@ -280,10 +305,8 @@ module RubyEventStore
280
305
 
281
306
  private
282
307
 
283
- def serialize_events(events)
284
- events.map do |ev|
285
- mapper.event_to_serialized_record(ev)
286
- end
308
+ def transform(events)
309
+ events.map { |ev| mapper.event_to_record(ev) }
287
310
  end
288
311
 
289
312
  def enrich_events_metadata(events)
@@ -295,11 +318,12 @@ module RubyEventStore
295
318
  def enrich_event_metadata(event)
296
319
  metadata.each { |key, value| event.metadata[key] ||= value }
297
320
  event.metadata[:timestamp] ||= clock.call
321
+ event.metadata[:valid_at] ||= event.metadata.fetch(:timestamp)
298
322
  event.metadata[:correlation_id] ||= correlation_id_generator.call
299
323
  end
300
324
 
301
- def append_to_stream_serialized_events(serialized_events, stream_name:, expected_version:)
302
- repository.append_to_stream(serialized_events, Stream.new(stream_name), ExpectedVersion.new(expected_version))
325
+ def append_records_to_stream(records, stream_name:, expected_version:)
326
+ repository.append_to_stream(records, Stream.new(stream_name), ExpectedVersion.new(expected_version))
303
327
  end
304
328
 
305
329
  protected
@@ -309,13 +333,13 @@ module RubyEventStore
309
333
  end
310
334
 
311
335
  def default_clock
312
- ->{ Time.now.utc }
336
+ ->{ Time.now.utc.round(TIMESTAMP_PRECISION) }
313
337
  end
314
338
 
315
339
  def default_correlation_id_generator
316
340
  ->{ SecureRandom.uuid }
317
341
  end
318
342
 
319
- attr_reader :repository, :mapper, :broker, :clock, :correlation_id_generator
343
+ attr_reader :repository, :mapper, :subscriptions, :broker, :clock, :correlation_id_generator
320
344
  end
321
345
  end
@@ -6,10 +6,10 @@ module RubyEventStore
6
6
  @dispatchers = dispatchers
7
7
  end
8
8
 
9
- def call(subscriber, event, serialized_event)
9
+ def call(subscriber, event, record)
10
10
  @dispatchers.each do |dispatcher|
11
11
  if dispatcher.verify(subscriber)
12
- dispatcher.call(subscriber, event, serialized_event)
12
+ dispatcher.call(subscriber, event, record)
13
13
  break
14
14
  end
15
15
  end
@@ -3,4 +3,5 @@
3
3
  module RubyEventStore
4
4
  GLOBAL_STREAM = Object.new
5
5
  PAGE_SIZE = 100.freeze
6
+ TIMESTAMP_PRECISION = 6
6
7
  end
@@ -12,7 +12,6 @@ module RubyEventStore
12
12
  EventDuplicatedInStream = Class.new(Error)
13
13
  ReservedInternalName = Class.new(Error)
14
14
  InvalidHandler = Class.new(Error)
15
- ProtobufEncodingFailed = Class.new(Error)
16
15
 
17
16
  class EventNotFound < Error
18
17
  attr_reader :event_id
@@ -41,6 +41,13 @@ module RubyEventStore
41
41
  metadata[:timestamp]
42
42
  end
43
43
 
44
+ # Validity time from metadata
45
+ #
46
+ # @return [Time, nil]
47
+ def valid_at
48
+ metadata[:valid_at]
49
+ end
50
+
44
51
  # Two events are equal if:
45
52
  # * they are of the same class
46
53
  # * have identical event id
@@ -116,7 +123,7 @@ module RubyEventStore
116
123
  # on correlation_id and message_id of the provided message.
117
124
  # {http://railseventstore.org/docs/correlation_causation/ Find out more}
118
125
  #
119
- # @param other_message [Event, Proto, command] message to correlate with. Most likely an event or a command. Must respond to correlation_id and message_id.
126
+ # @param other_message [Event, command] message to correlate with. Most likely an event or a command. Must respond to correlation_id and message_id.
120
127
  # @return [String] set causation_id
121
128
  def correlate_with(other_message)
122
129
  self.correlation_id = other_message.correlation_id || other_message.message_id
@@ -6,8 +6,8 @@ module RubyEventStore
6
6
  @scheduler = scheduler
7
7
  end
8
8
 
9
- def call(subscriber, _, serialized_event)
10
- @scheduler.call(subscriber, serialized_event)
9
+ def call(subscriber, _, record)
10
+ @scheduler.call(subscriber, record)
11
11
  end
12
12
 
13
13
  def verify(subscriber)