ruby_event_store 2.19.1 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ce9224b921ed7a88f7c7d6b35875ae497d0980b63b2088877d34a830678d812e
4
- data.tar.gz: 26dfca582631ed9e9e91d1ff35857052bb52de9cbff9ebdf3f27022a67ebb24a
3
+ metadata.gz: 05b8bd1227176e2a6d41cd4429f90f79a47ce98c13b03e81ba24cf6b61f0a118
4
+ data.tar.gz: 5100c038a126708538e6a9eecac435dacb9b58d2c0feacb9689daaab2217439c
5
5
  SHA512:
6
- metadata.gz: 55c6aa28f09507bee217fd58e979dab0e3962343fafb6b72ccf579c0fe1c4f4e828f6cff0aeb4ee89e94f4a6ffedf9069a14a267fe45c9cc021495d87f3cb10d
7
- data.tar.gz: d60413a68772516d46b8c9ab7812dc6572d7da1b8b706d339a6a864290914048c3a78b0c6386ae5abe9bff947a0a11f6dae903e91a4d1226de06038741ca7cd9
6
+ metadata.gz: 176ada1f03146d76a5a58ae8f7803fe029dd0fb265fa94b15da5412e7c98689b8be388ef977f77cdb56b54be3f4b420b6ffc291547f56b74136a9456f2c7341a
7
+ data.tar.gz: fd9befc69d34e4ca120520c4e0724b2dc031adfe2f9f35dc4a9f52e2d8977f61424988b85fd5c00983d228701bf5a10d628f7aa50be6c96f75507f5a63252760
@@ -2,7 +2,7 @@
2
2
 
3
3
  module RubyEventStore
4
4
  class Broker
5
- def initialize(subscriptions: Subscriptions.new, dispatcher: Dispatcher.new)
5
+ def initialize(subscriptions: Subscriptions.new, dispatcher: SyncScheduler.new)
6
6
  @subscriptions = subscriptions
7
7
  @dispatcher = dispatcher
8
8
  end
@@ -25,7 +25,7 @@ module RubyEventStore
25
25
  @event_type_resolver = event_type_resolver
26
26
 
27
27
  if (subscriptions || dispatcher)
28
- warn <<~EOW
28
+ msg = <<~EOW
29
29
  Passing subscriptions and dispatcher to #{self.class} has been deprecated.
30
30
 
31
31
  Pass it using message_broker argument. For example:
@@ -37,11 +37,12 @@ module RubyEventStore
37
37
  )
38
38
  )
39
39
  EOW
40
- warn <<~EOW if (message_broker)
40
+ msg += <<~EOW if message_broker
41
41
 
42
- Because message_broker has been provided,
43
- arguments passed by subscriptions or dispatcher will be ignored.
44
- EOW
42
+ Because message_broker has been provided,
43
+ arguments passed by subscriptions or dispatcher will be ignored.
44
+ EOW
45
+ Deprecations.warn(:ruby_client_subscriptions_dispatcher, message: msg)
45
46
  end
46
47
  end
47
48
 
@@ -98,11 +99,7 @@ module RubyEventStore
98
99
  # @param expected_version (see #publish)
99
100
  # @return [self]
100
101
  def link(event_ids, stream_name:, expected_version: :any)
101
- if event_ids.nil? || Array(event_ids).any?(&:nil?)
102
- warn <<~EOW
103
- Passing `nil` to link is deprecated and will raise ArgumentError in RubyEventStore 3.0.
104
- EOW
105
- end
102
+ raise ArgumentError, "event_ids must not be nil" if event_ids.nil? || Array(event_ids).any?(&:nil?)
106
103
  @repository.link_to_stream(Array(event_ids), Stream.new(stream_name), ExpectedVersion.new(expected_version))
107
104
  self
108
105
  end
@@ -385,11 +382,7 @@ module RubyEventStore
385
382
  end
386
383
 
387
384
  def enrich_events_metadata(events)
388
- if events.nil? || Array(events).any?(&:nil?)
389
- warn <<~EOW
390
- Passing `nil` to publish/append is deprecated and will raise ArgumentError in RubyEventStore 3.0.
391
- EOW
392
- end
385
+ raise ArgumentError, "events must not be nil" if events.nil? || Array(events).any?(&:nil?)
393
386
  events = Array(events)
394
387
  events.each { |event| enrich_event_metadata(event) }
395
388
  end
@@ -0,0 +1,63 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "set"
4
+
5
+ module RubyEventStore
6
+ module Deprecations
7
+ @suppressions = Set.new
8
+ @warnings = {}
9
+ @emitted = Set.new
10
+
11
+ class << self
12
+ def register(key, message)
13
+ @warnings[key] = message
14
+ end
15
+
16
+ def suppress(key)
17
+ @suppressions << key
18
+ end
19
+
20
+ def warn(key, message: nil)
21
+ return if @suppressions.include?(key)
22
+ return if @emitted.include?(key)
23
+ @emitted << key
24
+ Kernel.warn(
25
+ "[DEPRECATION] #{message || @warnings.fetch(key) { raise KeyError, "Deprecation :#{key} not registered. Call Deprecations.register first." }}",
26
+ )
27
+ end
28
+
29
+ def deprecate(klass, method_name, key:)
30
+ warn_key = key
31
+ is_private = klass.private_method_defined?(method_name)
32
+ this = self
33
+ wrapper =
34
+ Module.new do
35
+ define_method(method_name) do |*args, **kwargs, &block|
36
+ this.warn(warn_key)
37
+ super(*args, **kwargs, &block)
38
+ end
39
+ private(method_name) if is_private
40
+ end
41
+ klass.prepend(wrapper)
42
+ end
43
+
44
+ def deprecate_class_method(klass, method_name, key:)
45
+ warn_key = key
46
+ this = self
47
+ wrapper =
48
+ Module.new do
49
+ define_method(method_name) do |*args, **kwargs, &block|
50
+ this.warn(warn_key)
51
+ super(*args, **kwargs, &block)
52
+ end
53
+ end
54
+ klass.singleton_class.prepend(wrapper)
55
+ end
56
+
57
+ def reset!
58
+ @suppressions = Set.new
59
+ @emitted = Set.new
60
+ end
61
+ end
62
+ end
63
+ end
@@ -22,12 +22,11 @@ module RubyEventStore
22
22
  attr_reader :event_id, :position
23
23
  end
24
24
 
25
- def initialize(serializer: NULL, ensure_supported_any_usage: false)
25
+ def initialize(serializer: NULL)
26
26
  @serializer = serializer
27
27
  @streams = Hash.new { |h, k| h[k] = Array.new }
28
28
  @mutex = Mutex.new
29
29
  @storage = Hash.new
30
- @ensure_supported_any_usage = ensure_supported_any_usage
31
30
  end
32
31
 
33
32
  def append_to_stream(records, stream, expected_version)
@@ -237,17 +236,9 @@ module RubyEventStore
237
236
  stream_positions = streams.fetch(stream.name, Array.new).map(&:position)
238
237
  violation =
239
238
  (resolved_version.nil? && !stream_positions.compact.empty?) ||
240
- (!resolved_version.nil? && stream_positions.include?(nil))
241
-
242
- if violation
243
- if @ensure_supported_any_usage
244
- raise UnsupportedVersionAnyUsage
245
- else
246
- warn <<~EOW
247
- Mixing expected version :any and specific position (or :auto) is deprecated and will raise UnsupportedVersionAnyUsage in RubyEventStore 3.0.
248
- EOW
249
- end
250
- end
239
+ (!resolved_version.nil? && stream_positions.include?(nil))
240
+
241
+ raise UnsupportedVersionAnyUsage if violation
251
242
  end
252
243
 
253
244
  attr_reader :streams, :mutex, :storage, :serializer
@@ -2,12 +2,6 @@
2
2
 
3
3
  module RubyEventStore
4
4
  class InstrumentedBroker
5
- DEPRECATION_MESSAGE = <<~EOW
6
- Instrumentation event names *.rails_event_store are deprecated and will be removed in the next major release.
7
- Use *.ruby_event_store instead.
8
- EOW
9
- private_constant :DEPRECATION_MESSAGE
10
-
11
5
  def initialize(broker, instrumentation)
12
6
  @broker = broker
13
7
  @instrumentation = instrumentation
@@ -15,34 +9,28 @@ module RubyEventStore
15
9
 
16
10
  def call(topic, event, record)
17
11
  instrumentation.instrument("call.broker.ruby_event_store", topic: topic, event: event, record: record) do
18
- deprecated_instrument("call.broker.rails_event_store", topic: topic, event: event, record: record) do
19
- if broker.public_method(:call).arity == 3
20
- broker.call(topic, event, record)
21
- else
22
- warn <<~EOW
23
- Message broker shall support topics.
24
- Topic WILL BE IGNORED in the current broker.
25
- Modify the broker implementation to pass topic as an argument to broker.call method.
26
- EOW
27
- broker.call(event, record)
28
- end
12
+ if broker.public_method(:call).arity == 3
13
+ broker.call(topic, event, record)
14
+ else
15
+ warn <<~EOW
16
+ Message broker shall support topics.
17
+ Topic WILL BE IGNORED in the current broker.
18
+ Modify the broker implementation to pass topic as an argument to broker.call method.
19
+ EOW
20
+ broker.call(event, record)
29
21
  end
30
22
  end
31
23
  end
32
24
 
33
25
  def add_subscription(subscriber, topics)
34
26
  instrumentation.instrument("add_subscription.broker.ruby_event_store", subscriber: subscriber, topics: topics) do
35
- deprecated_instrument("add_subscription.broker.rails_event_store", subscriber: subscriber, topics: topics) do
36
- broker.add_subscription(subscriber, topics)
37
- end
27
+ broker.add_subscription(subscriber, topics)
38
28
  end
39
29
  end
40
30
 
41
31
  def add_global_subscription(subscriber)
42
32
  instrumentation.instrument("add_global_subscription.broker.ruby_event_store", subscriber: subscriber) do
43
- deprecated_instrument("add_global_subscription.broker.rails_event_store", subscriber: subscriber) do
44
- broker.add_global_subscription(subscriber)
45
- end
33
+ broker.add_global_subscription(subscriber)
46
34
  end
47
35
  end
48
36
 
@@ -51,26 +39,18 @@ module RubyEventStore
51
39
  "add_thread_subscription.broker.ruby_event_store",
52
40
  subscriber: subscriber,
53
41
  topics: topics,
54
- ) do
55
- deprecated_instrument("add_thread_subscription.broker.rails_event_store", subscriber: subscriber, topics: topics) do
56
- broker.add_thread_subscription(subscriber, topics)
57
- end
58
- end
42
+ ) { broker.add_thread_subscription(subscriber, topics) }
59
43
  end
60
44
 
61
45
  def add_thread_global_subscription(subscriber)
62
46
  instrumentation.instrument("add_thread_global_subscription.broker.ruby_event_store", subscriber: subscriber) do
63
- deprecated_instrument("add_thread_global_subscription.broker.rails_event_store", subscriber: subscriber) do
64
- broker.add_thread_global_subscription(subscriber)
65
- end
47
+ broker.add_thread_global_subscription(subscriber)
66
48
  end
67
49
  end
68
50
 
69
51
  def all_subscriptions_for(topic)
70
52
  instrumentation.instrument("all_subscriptions_for.broker.ruby_event_store", topic: topic) do
71
- deprecated_instrument("all_subscriptions_for.broker.rails_event_store", topic: topic) do
72
- broker.all_subscriptions_for(topic)
73
- end
53
+ broker.all_subscriptions_for(topic)
74
54
  end
75
55
  end
76
56
 
@@ -89,17 +69,5 @@ module RubyEventStore
89
69
  private
90
70
 
91
71
  attr_reader :instrumentation, :broker
92
-
93
- def deprecated_instrument(name, payload, &block)
94
- canonical_name = name.sub("rails_event_store", "ruby_event_store")
95
- old_listeners = instrumentation.notifier.all_listeners_for(name)
96
- new_listeners = instrumentation.notifier.all_listeners_for(canonical_name)
97
- if (old_listeners - new_listeners).any?
98
- warn DEPRECATION_MESSAGE
99
- instrumentation.instrument(name, payload, &block)
100
- else
101
- yield
102
- end
103
- end
104
72
  end
105
73
  end
@@ -2,12 +2,6 @@
2
2
 
3
3
  module RubyEventStore
4
4
  class InstrumentedDispatcher
5
- DEPRECATION_MESSAGE = <<~EOW
6
- Instrumentation event names *.rails_event_store are deprecated and will be removed in the next major release.
7
- Use *.ruby_event_store instead.
8
- EOW
9
- private_constant :DEPRECATION_MESSAGE
10
-
11
5
  def initialize(dispatcher, instrumentation)
12
6
  @dispatcher = dispatcher
13
7
  @instrumentation = instrumentation
@@ -15,9 +9,7 @@ module RubyEventStore
15
9
 
16
10
  def call(subscriber, event, record)
17
11
  instrumentation.instrument("call.dispatcher.ruby_event_store", event: event, subscriber: subscriber) do
18
- deprecated_instrument("call.dispatcher.rails_event_store", event: event, subscriber: subscriber) do
19
- dispatcher.call(subscriber, event, record)
20
- end
12
+ dispatcher.call(subscriber, event, record)
21
13
  end
22
14
  end
23
15
 
@@ -36,17 +28,5 @@ module RubyEventStore
36
28
  private
37
29
 
38
30
  attr_reader :instrumentation, :dispatcher
39
-
40
- def deprecated_instrument(name, payload, &block)
41
- canonical_name = name.sub("rails_event_store", "ruby_event_store")
42
- old_listeners = instrumentation.notifier.all_listeners_for(name)
43
- new_listeners = instrumentation.notifier.all_listeners_for(canonical_name)
44
- if (old_listeners - new_listeners).any?
45
- warn DEPRECATION_MESSAGE
46
- instrumentation.instrument(name, payload, &block)
47
- else
48
- yield
49
- end
50
- end
51
31
  end
52
32
  end
@@ -2,70 +2,52 @@
2
2
 
3
3
  module RubyEventStore
4
4
  class InstrumentedRepository
5
- DEPRECATION_MESSAGE = <<~EOW
6
- Instrumentation event names *.rails_event_store are deprecated and will be removed in the next major release.
7
- Use *.ruby_event_store instead.
8
- EOW
9
- private_constant :DEPRECATION_MESSAGE
10
-
11
5
  def initialize(repository, instrumentation)
12
6
  @repository = repository
13
7
  @instrumentation = instrumentation
14
8
  end
15
9
 
16
10
  def append_to_stream(records, stream, expected_version)
17
- instrumentation.instrument("append_to_stream.repository.ruby_event_store", records: records, events: records, stream: stream) do
18
- deprecated_instrument("append_to_stream.repository.rails_event_store", { records: records, events: records, stream: stream }) do
19
- repository.append_to_stream(records, stream, expected_version)
20
- end
21
- end
11
+ instrumentation.instrument(
12
+ "append_to_stream.repository.ruby_event_store",
13
+ records: records,
14
+ stream: stream,
15
+ ) { repository.append_to_stream(records, stream, expected_version) }
22
16
  end
23
17
 
24
18
  def link_to_stream(event_ids, stream, expected_version)
25
19
  instrumentation.instrument("link_to_stream.repository.ruby_event_store", event_ids: event_ids, stream: stream) do
26
- deprecated_instrument("link_to_stream.repository.rails_event_store", event_ids: event_ids, stream: stream) do
27
- repository.link_to_stream(event_ids, stream, expected_version)
28
- end
20
+ repository.link_to_stream(event_ids, stream, expected_version)
29
21
  end
30
22
  end
31
23
 
32
24
  def delete_stream(stream)
33
25
  instrumentation.instrument("delete_stream.repository.ruby_event_store", stream: stream) do
34
- deprecated_instrument("delete_stream.repository.rails_event_store", stream: stream) do
35
- repository.delete_stream(stream)
36
- end
26
+ repository.delete_stream(stream)
37
27
  end
38
28
  end
39
29
 
40
30
  def read(specification)
41
31
  instrumentation.instrument("read.repository.ruby_event_store", specification: specification) do
42
- deprecated_instrument("read.repository.rails_event_store", specification: specification) do
43
- repository.read(specification)
44
- end
32
+ repository.read(specification)
45
33
  end
46
34
  end
47
35
 
48
36
  def count(specification)
49
37
  instrumentation.instrument("count.repository.ruby_event_store", specification: specification) do
50
- deprecated_instrument("count.repository.rails_event_store", specification: specification) do
51
- repository.count(specification)
52
- end
38
+ repository.count(specification)
53
39
  end
54
40
  end
55
41
 
56
42
  def update_messages(records)
57
- instrumentation.instrument("update_messages.repository.ruby_event_store", records: records, messages: records) do
58
- deprecated_instrument("update_messages.repository.rails_event_store", { records: records, messages: records }) do
59
- repository.update_messages(records)
60
- end
43
+ instrumentation.instrument("update_messages.repository.ruby_event_store", records: records) do
44
+ repository.update_messages(records)
61
45
  end
62
46
  end
63
47
 
64
48
  def streams_of(event_id)
65
49
  instrumentation.instrument("streams_of.repository.ruby_event_store", event_id: event_id) do
66
- deprecated_instrument("streams_of.repository.rails_event_store", event_id: event_id) do
67
- repository.streams_of(event_id)
68
- end
50
+ repository.streams_of(event_id)
69
51
  end
70
52
  end
71
53
 
@@ -84,17 +66,5 @@ module RubyEventStore
84
66
  private
85
67
 
86
68
  attr_reader :repository, :instrumentation
87
-
88
- def deprecated_instrument(name, payload, &block)
89
- canonical_name = name.sub("rails_event_store", "ruby_event_store")
90
- old_listeners = instrumentation.notifier.all_listeners_for(name)
91
- new_listeners = instrumentation.notifier.all_listeners_for(canonical_name)
92
- if (old_listeners - new_listeners).any?
93
- warn DEPRECATION_MESSAGE
94
- instrumentation.instrument(name, payload, &block)
95
- else
96
- yield
97
- end
98
- end
99
69
  end
100
70
  end
@@ -42,9 +42,9 @@ module RubyEventStore
42
42
  private
43
43
 
44
44
  def instrument(args)
45
- instrumentation.instrument("add.subscriptions.rails_event_store", args) do
45
+ instrumentation.instrument("add.subscriptions.ruby_event_store", args) do
46
46
  unsubscribe = yield
47
- -> { instrumentation.instrument("remove.subscriptions.rails_event_store", args) { unsubscribe.call } }
47
+ -> { instrumentation.instrument("remove.subscriptions.ruby_event_store", args) { unsubscribe.call } }
48
48
  end
49
49
  end
50
50
 
@@ -3,21 +3,8 @@
3
3
  module RubyEventStore
4
4
  module Mappers
5
5
  class Default < PipelineMapper
6
- def initialize(events_class_remapping: {})
7
- if events_class_remapping.any?
8
- warn <<~EOW
9
- DEPRECATION WARNING: `events_class_remapping` option in `RubyEventStore::Mappers::Default` is deprecated and will be removed in the next major release.
10
- Use `RubyEventStore::Mappers::Transformation::Upcast` instead.
11
- EOW
12
- super(
13
- Pipeline.new(
14
- Transformation::EventClassRemapper.new(events_class_remapping),
15
- Transformation::SymbolizeMetadataKeys.new,
16
- ),
17
- )
18
- else
19
- super(Pipeline.new(Transformation::SymbolizeMetadataKeys.new))
20
- end
6
+ def initialize
7
+ super(Pipeline.new(Transformation::SymbolizeMetadataKeys.new))
21
8
  end
22
9
  end
23
10
  end
@@ -3,12 +3,6 @@
3
3
  module RubyEventStore
4
4
  module Mappers
5
5
  class InstrumentedBatchMapper
6
- DEPRECATION_MESSAGE = <<~EOW
7
- Instrumentation event names *.rails_event_store are deprecated and will be removed in the next major release.
8
- Use *.ruby_event_store instead.
9
- EOW
10
- private_constant :DEPRECATION_MESSAGE
11
-
12
6
  def initialize(mapper, instrumentation)
13
7
  @mapper = mapper
14
8
  @instrumentation = instrumentation
@@ -16,35 +10,19 @@ module RubyEventStore
16
10
 
17
11
  def events_to_records(events)
18
12
  instrumentation.instrument("events_to_records.mapper.ruby_event_store", domain_events: events) do
19
- deprecated_instrument("events_to_records.mapper.rails_event_store", domain_events: events) do
20
- mapper.events_to_records(events)
21
- end
13
+ mapper.events_to_records(events)
22
14
  end
23
15
  end
24
16
 
25
17
  def records_to_events(records)
26
18
  instrumentation.instrument("records_to_events.mapper.ruby_event_store", records: records) do
27
- deprecated_instrument("records_to_events.mapper.rails_event_store", records: records) do
28
- mapper.records_to_events(records)
29
- end
19
+ mapper.records_to_events(records)
30
20
  end
31
21
  end
32
22
 
33
23
  private
34
24
 
35
25
  attr_reader :instrumentation, :mapper
36
-
37
- def deprecated_instrument(name, payload, &block)
38
- canonical_name = name.sub("rails_event_store", "ruby_event_store")
39
- old_listeners = instrumentation.notifier.all_listeners_for(name)
40
- new_listeners = instrumentation.notifier.all_listeners_for(canonical_name)
41
- if (old_listeners - new_listeners).any?
42
- warn DEPRECATION_MESSAGE
43
- instrumentation.instrument(name, payload, &block)
44
- else
45
- yield
46
- end
47
- end
48
26
  end
49
27
  end
50
28
  end
@@ -3,19 +3,6 @@
3
3
  module RubyEventStore
4
4
  module Mappers
5
5
  class InstrumentedMapper
6
- DEPRECATION_MESSAGE = <<~EOW
7
- Instrumentation event names *.rails_event_store are deprecated and will be removed in the next major release.
8
- Use *.ruby_event_store instead.
9
- EOW
10
- private_constant :DEPRECATION_MESSAGE
11
-
12
- RENAME_DEPRECATION_MESSAGE = <<~EOW
13
- Instrumentation event names serialize.mapper.ruby_event_store and deserialize.mapper.ruby_event_store are deprecated and will be removed in the next major release.
14
- Use event_to_record.mapper.ruby_event_store and record_to_event.mapper.ruby_event_store instead.
15
- The domain_event: payload key in serialize.mapper.ruby_event_store has been renamed to event: in event_to_record.mapper.ruby_event_store.
16
- EOW
17
- private_constant :RENAME_DEPRECATION_MESSAGE
18
-
19
6
  def initialize(mapper, instrumentation)
20
7
  @mapper = mapper
21
8
  @instrumentation = instrumentation
@@ -23,43 +10,19 @@ module RubyEventStore
23
10
 
24
11
  def event_to_record(event)
25
12
  instrumentation.instrument("event_to_record.mapper.ruby_event_store", event: event) do
26
- deprecated_instrument("serialize.mapper.ruby_event_store", { domain_event: event },
27
- canonical: "event_to_record.mapper.ruby_event_store",
28
- message: RENAME_DEPRECATION_MESSAGE) do
29
- deprecated_instrument("serialize.mapper.rails_event_store", { domain_event: event }) do
30
- mapper.event_to_record(event)
31
- end
32
- end
13
+ mapper.event_to_record(event)
33
14
  end
34
15
  end
35
16
 
36
17
  def record_to_event(record)
37
18
  instrumentation.instrument("record_to_event.mapper.ruby_event_store", record: record) do
38
- deprecated_instrument("deserialize.mapper.ruby_event_store", { record: record },
39
- canonical: "record_to_event.mapper.ruby_event_store",
40
- message: RENAME_DEPRECATION_MESSAGE) do
41
- deprecated_instrument("deserialize.mapper.rails_event_store", { record: record }) do
42
- mapper.record_to_event(record)
43
- end
44
- end
19
+ mapper.record_to_event(record)
45
20
  end
46
21
  end
47
22
 
48
23
  private
49
24
 
50
25
  attr_reader :instrumentation, :mapper
51
-
52
- def deprecated_instrument(name, payload, canonical: nil, message: DEPRECATION_MESSAGE, &block)
53
- canonical_name = canonical || name.sub("rails_event_store", "ruby_event_store")
54
- old_listeners = instrumentation.notifier.all_listeners_for(name)
55
- new_listeners = instrumentation.notifier.all_listeners_for(canonical_name)
56
- if (old_listeners - new_listeners).any?
57
- warn message
58
- instrumentation.instrument(name, payload, &block)
59
- else
60
- yield
61
- end
62
- end
63
26
  end
64
27
  end
65
28
  end
@@ -3,29 +3,17 @@
3
3
  module RubyEventStore
4
4
  class Projection
5
5
  ANONYMOUS_CLASS = "#<Class:".freeze
6
- DEPRECATION_MESSAGE = <<~EOW
7
- RubyEventStore::Projection from_stream/from_all_streams/init/when/run API is deprecated and will be removed in the next major release.
8
- Use Projection.init(initial_state).on(EventClass) { |state, event| new_state }.call(scope) instead.
9
- EOW
10
- MULTI_SCOPE_DEPRECATION_MESSAGE = <<~EOW
11
- Passing multiple scopes to RubyEventStore::Projection#call is deprecated and will be removed in the next major release.
12
- Use a single scope instead, e.g. call(event_store.read.stream("stream_name")).
13
- EOW
14
- NEW_CONSTRUCTOR_DEPRECATION_MESSAGE = <<~EOW
15
- RubyEventStore::Projection.new is deprecated and will be removed in the next major release.
16
- Use Projection.init(initial_state) instead.
17
- EOW
18
- private_constant :ANONYMOUS_CLASS, :DEPRECATION_MESSAGE, :MULTI_SCOPE_DEPRECATION_MESSAGE, :NEW_CONSTRUCTOR_DEPRECATION_MESSAGE
6
+ private_constant :ANONYMOUS_CLASS
19
7
 
20
- def initialize(initial_state = nil, _internal: false)
21
- warn NEW_CONSTRUCTOR_DEPRECATION_MESSAGE unless _internal
22
- @handlers = {}
23
- @init = -> { initial_state }
24
- @streams = []
25
- end
8
+ private_class_method :new
26
9
 
27
10
  def self.init(initial_state = nil)
28
- new(initial_state, _internal: true)
11
+ new(initial_state)
12
+ end
13
+
14
+ def initialize(initial_state)
15
+ @handlers = {}
16
+ @init = -> { initial_state }
29
17
  end
30
18
 
31
19
  def on(*event_klasses, &block)
@@ -40,64 +28,10 @@ module RubyEventStore
40
28
  self
41
29
  end
42
30
 
43
- def call(*scopes)
31
+ def call(scope)
44
32
  return initial_state if handled_events.empty?
45
33
 
46
- warn MULTI_SCOPE_DEPRECATION_MESSAGE if scopes.size > 1
47
-
48
- scopes.reduce(initial_state) do |state, scope|
49
- scope.of_type(handled_events).reduce(state, &method(:transition))
50
- end
51
- end
52
-
53
- def self.from_stream(stream_or_streams)
54
- warn DEPRECATION_MESSAGE
55
- streams = Array(stream_or_streams)
56
- raise(ArgumentError, "At least one stream must be given") if streams.empty?
57
- projection = new(_internal: true)
58
- projection.instance_variable_set(:@streams, streams)
59
- projection
60
- end
61
-
62
- def self.from_all_streams
63
- warn DEPRECATION_MESSAGE
64
- new(_internal: true)
65
- end
66
-
67
- def init(handler)
68
- warn DEPRECATION_MESSAGE
69
- @init = handler
70
- self
71
- end
72
-
73
- def when(events, handler)
74
- warn DEPRECATION_MESSAGE
75
- Array(events).each do |event_klass|
76
- name = event_klass.to_s
77
- @handlers[name] = ->(state, event) { handler.call(state, event); state }
78
- end
79
- self
80
- end
81
-
82
- def run(event_store, start: nil, count: PAGE_SIZE)
83
- warn DEPRECATION_MESSAGE
84
-
85
- if @streams.any?
86
- raise ArgumentError, "Start must be an array with event ids" unless valid_start_for_streams?(start)
87
- scopes =
88
- @streams.zip(start || []).map do |stream, start_event_id|
89
- scope = event_store.read.stream(stream).in_batches(count)
90
- scope = scope.from(start_event_id) if start_event_id
91
- scope
92
- end
93
- else
94
- raise ArgumentError, "Start must be valid event id" unless valid_start_for_all_streams?(start)
95
- scope = event_store.read.in_batches(count)
96
- scope = scope.from(start) if start
97
- scopes = [scope]
98
- end
99
-
100
- call(*scopes)
34
+ scope.of_type(handled_events).reduce(initial_state, &method(:transition))
101
35
  end
102
36
 
103
37
  private
@@ -113,15 +47,5 @@ module RubyEventStore
113
47
  def transition(state, event)
114
48
  @handlers.fetch(event.event_type).call(state, event)
115
49
  end
116
-
117
- def valid_start_for_streams?(start)
118
- return true unless start
119
- start.instance_of?(Array) && start.size == @streams.size
120
- end
121
-
122
- def valid_start_for_all_streams?(start)
123
- return true unless start
124
- start.instance_of?(String)
125
- end
126
50
  end
127
51
  end
@@ -5,7 +5,7 @@ RSpec.shared_examples "broker" do |broker_klass|
5
5
  let(:record) { instance_double(::RubyEventStore::Record) }
6
6
  let(:handler) { HandlerClass.new }
7
7
  let(:subscriptions) { ::RubyEventStore::Subscriptions.new }
8
- let(:dispatcher) { ::RubyEventStore::Dispatcher.new }
8
+ let(:dispatcher) { ::RubyEventStore::SyncScheduler.new }
9
9
  let(:broker) { broker_klass.new(subscriptions: subscriptions, dispatcher: dispatcher) }
10
10
 
11
11
  specify "no dispatch when no subscriptions" do
@@ -56,7 +56,7 @@ RSpec.shared_examples "broker" do |broker_klass|
56
56
  allow(dispatcher).to receive(:verify).and_return(false)
57
57
  expect { broker.add_subscription(HandlerClass, []) }.to raise_error(
58
58
  RubyEventStore::InvalidHandler,
59
- /Handler HandlerClass is invalid for dispatcher .*Dispatcher/,
59
+ /Handler HandlerClass is invalid for dispatcher .*SyncScheduler/,
60
60
  )
61
61
  expect { broker.add_global_subscription(HandlerClass) }.to raise_error(
62
62
  RubyEventStore::InvalidHandler,
@@ -245,15 +245,6 @@ module RubyEventStore
245
245
  )
246
246
  end
247
247
 
248
- def in_batches_of(batch_size = DEFAULT_BATCH_SIZE)
249
- warn <<~EOW
250
- RubyEventStore::Specification#in_batches_of is deprecated and will be removed in the next major release.
251
-
252
- Use #in_batches instead.
253
- EOW
254
- in_batches(batch_size)
255
- end
256
-
257
248
  # Specifies that only first event should be read.
258
249
  # {https://railseventstore.org/docs/core-concepts/read Find out more}.
259
250
  #
@@ -297,15 +288,6 @@ module RubyEventStore
297
288
  Specification.new(reader, result.dup { |r| r.with_types = types.flatten })
298
289
  end
299
290
 
300
- def of_types(*types)
301
- warn <<~EOW
302
- RubyEventStore::Specification#of_types is deprecated and will be removed in the next major release.
303
-
304
- Use #of_type instead.
305
- EOW
306
- of_type(*types)
307
- end
308
-
309
291
  # Limits the query to certain events by given even ids.
310
292
  # {https://railseventstore.org/docs/core-concepts/read Find out more}.
311
293
  #
@@ -2,30 +2,12 @@
2
2
 
3
3
  module RubyEventStore
4
4
  class SyncScheduler
5
- DEPRECATION_MESSAGE = <<~EOW
6
- DEPRECATION WARNING: Passing a class as a subscriber is deprecated and will be removed in the next major release.
7
- Pass an instance or lambda instead, e.g. subscribe(MyHandler.new, to: [MyEvent]).
8
- EOW
9
-
10
5
  def call(subscriber, event, _)
11
- if Class === subscriber
12
- warn DEPRECATION_MESSAGE
13
- subscriber = subscriber.new
14
- end
15
6
  subscriber.call(event)
16
7
  end
17
8
 
18
9
  def verify(subscriber)
19
- if Class === subscriber
20
- warn DEPRECATION_MESSAGE
21
- begin
22
- subscriber.new.respond_to?(:call)
23
- rescue ArgumentError
24
- false
25
- end
26
- else
27
- subscriber.respond_to?(:call)
28
- end
10
+ subscriber.respond_to?(:call)
29
11
  end
30
12
  end
31
13
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RubyEventStore
4
- VERSION = "2.19.1"
4
+ VERSION = "3.0.0"
5
5
  end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require_relative "ruby_event_store/deprecations"
3
4
  require_relative "ruby_event_store/sync_scheduler"
4
- require_relative "ruby_event_store/dispatcher"
5
5
  require_relative "ruby_event_store/subscriptions"
6
6
  require_relative "ruby_event_store/broker"
7
7
  require_relative "ruby_event_store/in_memory_repository"
@@ -24,7 +24,6 @@ require_relative "ruby_event_store/mappers/encryption_key"
24
24
  require_relative "ruby_event_store/mappers/in_memory_encryption_key_repository"
25
25
  require_relative "ruby_event_store/mappers/transformation/domain_event"
26
26
  require_relative "ruby_event_store/mappers/transformation/encryption"
27
- require_relative "ruby_event_store/mappers/transformation/event_class_remapper"
28
27
  require_relative "ruby_event_store/mappers/transformation/upcast"
29
28
  require_relative "ruby_event_store/mappers/transformation/stringify_metadata_keys"
30
29
  require_relative "ruby_event_store/mappers/transformation/symbolize_metadata_keys"
@@ -37,14 +36,11 @@ require_relative "ruby_event_store/mappers/forgotten_data"
37
36
  require_relative "ruby_event_store/mappers/encryption_mapper"
38
37
  require_relative "ruby_event_store/mappers/instrumented_mapper"
39
38
  require_relative "ruby_event_store/mappers/instrumented_batch_mapper"
40
- require_relative "ruby_event_store/mappers/json_mapper"
41
- require_relative "ruby_event_store/mappers/null_mapper"
42
39
  require_relative "ruby_event_store/serializers/yaml"
43
40
  require_relative "ruby_event_store/batch_enumerator"
44
41
  require_relative "ruby_event_store/correlated_commands"
45
42
  require_relative "ruby_event_store/link_by_metadata"
46
43
  require_relative "ruby_event_store/immediate_dispatcher"
47
- require_relative "ruby_event_store/immediate_async_dispatcher"
48
44
  require_relative "ruby_event_store/composed_dispatcher"
49
45
  require_relative "ruby_event_store/composed_broker"
50
46
  require_relative "ruby_event_store/version"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby_event_store
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.19.1
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Arkency
@@ -47,12 +47,11 @@ files:
47
47
  - lib/ruby_event_store/composed_dispatcher.rb
48
48
  - lib/ruby_event_store/constants.rb
49
49
  - lib/ruby_event_store/correlated_commands.rb
50
- - lib/ruby_event_store/dispatcher.rb
50
+ - lib/ruby_event_store/deprecations.rb
51
51
  - lib/ruby_event_store/errors.rb
52
52
  - lib/ruby_event_store/event.rb
53
53
  - lib/ruby_event_store/event_type_resolver.rb
54
54
  - lib/ruby_event_store/expected_version.rb
55
- - lib/ruby_event_store/immediate_async_dispatcher.rb
56
55
  - lib/ruby_event_store/immediate_dispatcher.rb
57
56
  - lib/ruby_event_store/in_memory_repository.rb
58
57
  - lib/ruby_event_store/instrumented_broker.rb
@@ -68,13 +67,10 @@ files:
68
67
  - lib/ruby_event_store/mappers/in_memory_encryption_key_repository.rb
69
68
  - lib/ruby_event_store/mappers/instrumented_batch_mapper.rb
70
69
  - lib/ruby_event_store/mappers/instrumented_mapper.rb
71
- - lib/ruby_event_store/mappers/json_mapper.rb
72
- - lib/ruby_event_store/mappers/null_mapper.rb
73
70
  - lib/ruby_event_store/mappers/pipeline.rb
74
71
  - lib/ruby_event_store/mappers/pipeline_mapper.rb
75
72
  - lib/ruby_event_store/mappers/transformation/domain_event.rb
76
73
  - lib/ruby_event_store/mappers/transformation/encryption.rb
77
- - lib/ruby_event_store/mappers/transformation/event_class_remapper.rb
78
74
  - lib/ruby_event_store/mappers/transformation/preserve_types.rb
79
75
  - lib/ruby_event_store/mappers/transformation/stringify_metadata_keys.rb
80
76
  - lib/ruby_event_store/mappers/transformation/symbolize_metadata_keys.rb
@@ -123,7 +119,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
123
119
  - !ruby/object:Gem::Version
124
120
  version: '0'
125
121
  requirements: []
126
- rubygems_version: 4.0.6
122
+ rubygems_version: 3.7.1
127
123
  specification_version: 4
128
124
  summary: Implementation of an event store in Ruby
129
125
  test_files: []
@@ -1,12 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module RubyEventStore
4
- class Dispatcher < SyncScheduler
5
- def initialize
6
- warn <<~EOW
7
- DEPRECATION WARNING: `RubyEventStore::Dispatcher` is deprecated and will be removed in the next major release.
8
- Use `RubyEventStore::SyncScheduler` instead.
9
- EOW
10
- end
11
- end
12
- end
@@ -1,13 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module RubyEventStore
4
- class ImmediateAsyncDispatcher < ImmediateDispatcher
5
- def initialize(scheduler:)
6
- warn <<~EOW
7
- DEPRECATION WARNING: `RubyEventStore::ImmediateAsyncDispatcher` is deprecated and will be removed in the next major release.
8
- Use `RubyEventStore::ImmediateDispatcher` instead.
9
- EOW
10
- super
11
- end
12
- end
13
- end
@@ -1,16 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module RubyEventStore
4
- module Mappers
5
- class JSONMapper < Default
6
- def initialize(events_class_remapping: {})
7
- warn <<~EOW
8
- Please replace RubyEventStore::Mappers::JSONMapper with RubyEventStore::Mappers::Default
9
-
10
- They're now identical and the former will be removed in next major release.
11
- EOW
12
- super
13
- end
14
- end
15
- end
16
- end
@@ -1,15 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module RubyEventStore
4
- module Mappers
5
- class NullMapper < PipelineMapper
6
- def initialize
7
- warn <<~EOW
8
- DEPRECATION WARNING: `RubyEventStore::Mappers::NullMapper` is deprecated and will be removed in the next major release.
9
- Use `RubyEventStore::Mappers::Default.new` instead.
10
- EOW
11
- super(Pipeline.new)
12
- end
13
- end
14
- end
15
- end
@@ -1,36 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module RubyEventStore
4
- module Mappers
5
- module Transformation
6
- class EventClassRemapper
7
- def initialize(class_map)
8
- warn <<~EOW
9
- DEPRECATION WARNING: `RubyEventStore::Mappers::Transformation::EventClassRemapper` is deprecated and will be removed in the next major release.
10
- Use `RubyEventStore::Mappers::Transformation::Upcast` instead.
11
- EOW
12
- @class_map = class_map
13
- end
14
-
15
- def dump(record)
16
- record
17
- end
18
-
19
- def load(record)
20
- Record.new(
21
- event_id: record.event_id,
22
- event_type: class_map[record.event_type] || record.event_type,
23
- data: record.data,
24
- metadata: record.metadata,
25
- timestamp: record.timestamp,
26
- valid_at: record.valid_at,
27
- )
28
- end
29
-
30
- private
31
-
32
- attr_reader :class_map
33
- end
34
- end
35
- end
36
- end