ruby_event_store 0.30.0 → 1.3.1

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 (67) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +9 -1
  3. data/Makefile +15 -62
  4. data/lib/ruby_event_store/batch_enumerator.rb +15 -5
  5. data/lib/ruby_event_store/broker.rb +45 -0
  6. data/lib/ruby_event_store/client.rb +220 -130
  7. data/lib/ruby_event_store/composed_dispatcher.rb +24 -0
  8. data/lib/ruby_event_store/constants.rb +2 -0
  9. data/lib/ruby_event_store/correlated_commands.rb +42 -0
  10. data/lib/ruby_event_store/dispatcher.rb +20 -0
  11. data/lib/ruby_event_store/errors.rb +16 -16
  12. data/lib/ruby_event_store/event.rb +70 -14
  13. data/lib/ruby_event_store/expected_version.rb +2 -0
  14. data/lib/ruby_event_store/immediate_async_dispatcher.rb +17 -0
  15. data/lib/ruby_event_store/in_memory_repository.rb +45 -17
  16. data/lib/ruby_event_store/instrumented_dispatcher.rb +23 -0
  17. data/lib/ruby_event_store/instrumented_repository.rb +63 -0
  18. data/lib/ruby_event_store/link_by_metadata.rb +57 -0
  19. data/lib/ruby_event_store/mappers/default.rb +10 -26
  20. data/lib/ruby_event_store/mappers/encryption_key.rb +74 -0
  21. data/lib/ruby_event_store/mappers/encryption_mapper.rb +16 -0
  22. data/lib/ruby_event_store/mappers/forgotten_data.rb +30 -0
  23. data/lib/ruby_event_store/mappers/in_memory_encryption_key_repository.rb +34 -0
  24. data/lib/ruby_event_store/mappers/instrumented_mapper.rb +28 -0
  25. data/lib/ruby_event_store/mappers/json_mapper.rb +16 -0
  26. data/lib/ruby_event_store/mappers/null_mapper.rb +5 -8
  27. data/lib/ruby_event_store/mappers/pipeline.rb +31 -0
  28. data/lib/ruby_event_store/mappers/pipeline_mapper.rb +22 -0
  29. data/lib/ruby_event_store/mappers/protobuf.rb +13 -67
  30. data/lib/ruby_event_store/mappers/transformation/domain_event.rb +26 -0
  31. data/lib/ruby_event_store/mappers/transformation/encryption.rb +128 -0
  32. data/lib/ruby_event_store/mappers/transformation/event_class_remapper.rb +24 -0
  33. data/lib/ruby_event_store/mappers/transformation/item.rb +56 -0
  34. data/lib/ruby_event_store/mappers/transformation/proto_event.rb +17 -0
  35. data/lib/ruby_event_store/mappers/transformation/protobuf_encoder.rb +30 -0
  36. data/lib/ruby_event_store/mappers/transformation/protobuf_nested_struct_metadata.rb +30 -0
  37. data/lib/ruby_event_store/mappers/transformation/serialization.rb +34 -0
  38. data/lib/ruby_event_store/mappers/transformation/serialized_record.rb +27 -0
  39. data/lib/ruby_event_store/mappers/transformation/stringify_metadata_keys.rb +24 -0
  40. data/lib/ruby_event_store/mappers/transformation/symbolize_metadata_keys.rb +24 -0
  41. data/lib/ruby_event_store/metadata.rb +4 -2
  42. data/lib/ruby_event_store/projection.rb +34 -12
  43. data/lib/ruby_event_store/serialized_record.rb +3 -1
  44. data/lib/ruby_event_store/spec/broker_lint.rb +92 -0
  45. data/lib/ruby_event_store/spec/dispatcher_lint.rb +4 -36
  46. data/lib/ruby_event_store/spec/event_lint.rb +71 -0
  47. data/lib/ruby_event_store/spec/event_repository_lint.rb +1092 -962
  48. data/lib/ruby_event_store/spec/mapper_lint.rb +17 -0
  49. data/lib/ruby_event_store/spec/scheduler_lint.rb +9 -0
  50. data/lib/ruby_event_store/spec/subscriptions_lint.rb +111 -0
  51. data/lib/ruby_event_store/specification.rb +201 -56
  52. data/lib/ruby_event_store/specification_reader.rb +43 -0
  53. data/lib/ruby_event_store/specification_result.rb +212 -0
  54. data/lib/ruby_event_store/stream.rb +2 -0
  55. data/lib/ruby_event_store/subscriptions.rb +110 -0
  56. data/lib/ruby_event_store/transform_keys.rb +31 -0
  57. data/lib/ruby_event_store/version.rb +3 -1
  58. data/lib/ruby_event_store.rb +34 -4
  59. data/ruby_event_store.gemspec +1 -10
  60. metadata +47 -126
  61. data/exe/res-deprecated-read-api-migrator +0 -19
  62. data/lib/ruby_event_store/deprecated_read_api_rewriter.rb +0 -67
  63. data/lib/ruby_event_store/deprecated_read_api_runner.rb +0 -64
  64. data/lib/ruby_event_store/deprecations.rb +0 -7
  65. data/lib/ruby_event_store/pub_sub/broker.rb +0 -73
  66. data/lib/ruby_event_store/pub_sub/dispatcher.rb +0 -25
  67. data/lib/ruby_event_store/spec/event_broker_lint.rb +0 -211
@@ -1,25 +0,0 @@
1
- module RubyEventStore
2
- module PubSub
3
-
4
- class Dispatcher
5
- def call(subscriber, event)
6
- subscriber = subscriber.new if Class === subscriber
7
- subscriber.call(event)
8
- end
9
-
10
- def verify(subscriber)
11
- subscriber = klassify(subscriber)
12
- subscriber.respond_to?(:call) or raise InvalidHandler.new(subscriber)
13
- end
14
-
15
- private
16
-
17
- def klassify(subscriber)
18
- Class === subscriber ? subscriber.new : subscriber
19
- rescue ArgumentError
20
- raise InvalidHandler.new(subscriber)
21
- end
22
- end
23
-
24
- end
25
- end
@@ -1,211 +0,0 @@
1
- RSpec.shared_examples :event_broker do |broker_class|
2
- Test1DomainEvent = Class.new(RubyEventStore::Event)
3
- Test2DomainEvent = Class.new(RubyEventStore::Event)
4
- Test3DomainEvent = Class.new(RubyEventStore::Event)
5
-
6
- class InvalidTestHandler
7
- end
8
- class TestHandler
9
- def initialize
10
- @events = []
11
- end
12
-
13
- def call(event)
14
- @events << event
15
- end
16
-
17
- attr_reader :events
18
- end
19
- class TestDispatcher
20
- attr_reader :dispatched
21
-
22
- def initialize
23
- @dispatched = []
24
- end
25
-
26
- def verify(_subscriber)
27
- end
28
-
29
- def call(subscriber, event)
30
- @dispatched << {subscriber: subscriber, event: event}
31
- end
32
- end
33
-
34
- subject(:broker) { broker_class.new }
35
-
36
- it 'raise error when no subscriber' do
37
- expect { broker.add_subscriber(nil, [])}.to raise_error(RubyEventStore::SubscriberNotExist)
38
- expect { broker.add_thread_subscriber(nil, [])}.to raise_error(RubyEventStore::SubscriberNotExist)
39
- expect { broker.add_global_subscriber(nil)}.to raise_error(RubyEventStore::SubscriberNotExist)
40
- expect { broker.add_thread_global_subscriber(nil)}.to raise_error(RubyEventStore::SubscriberNotExist)
41
- end
42
-
43
- it 'notifies subscribed handlers' do
44
- handler = TestHandler.new
45
- another_handler = TestHandler.new
46
- global_handler = TestHandler.new
47
-
48
- broker.add_subscriber(handler, [Test1DomainEvent, Test3DomainEvent])
49
- broker.add_subscriber(another_handler, [Test2DomainEvent])
50
- broker.add_global_subscriber(global_handler)
51
-
52
- event1 = Test1DomainEvent.new
53
- event2 = Test2DomainEvent.new
54
- event3 = Test3DomainEvent.new
55
-
56
- [event1, event2, event3].each do |ev|
57
- broker.notify_subscribers(ev)
58
- end
59
-
60
- expect(handler.events).to eq([event1,event3])
61
- expect(another_handler.events).to eq([event2])
62
- expect(global_handler.events).to eq([event1,event2,event3])
63
- end
64
-
65
- it 'notifies subscribed thread handlers' do
66
- handler = TestHandler.new
67
- another_handler = TestHandler.new
68
- global_handler = TestHandler.new
69
-
70
- broker.add_thread_subscriber(handler, [Test1DomainEvent, Test3DomainEvent])
71
- broker.add_thread_subscriber(another_handler, [Test2DomainEvent])
72
- broker.add_thread_global_subscriber(global_handler)
73
-
74
- event1 = Test1DomainEvent.new
75
- event2 = Test2DomainEvent.new
76
- event3 = Test3DomainEvent.new
77
-
78
- [event1, event2, event3].each do |ev|
79
- broker.notify_subscribers(ev)
80
- end
81
-
82
- expect(handler.events).to eq([event1,event3])
83
- expect(another_handler.events).to eq([event2])
84
- expect(global_handler.events).to eq([event1,event2,event3])
85
- end
86
-
87
- it 'raises error when no valid method on handler' do
88
- subscriber = InvalidTestHandler.new
89
- expect do
90
- broker.add_subscriber(subscriber, [Test1DomainEvent])
91
- end.to raise_error(RubyEventStore::InvalidHandler)
92
- end
93
-
94
- it 'raises error when no valid method on global handler' do
95
- subscriber = InvalidTestHandler.new
96
- expect do
97
- broker.add_global_subscriber(subscriber)
98
- end.to raise_error(RubyEventStore::InvalidHandler)
99
- end
100
-
101
- it 'raises error when no valid method on thread handler' do
102
- subscriber = InvalidTestHandler.new
103
- expect do
104
- broker.add_thread_subscriber(subscriber, [Test1DomainEvent])
105
- end.to raise_error(RubyEventStore::InvalidHandler)
106
- end
107
-
108
- it 'raises error when no valid method on global thread handler' do
109
- subscriber = InvalidTestHandler.new
110
- expect do
111
- broker.add_thread_global_subscriber(subscriber)
112
- end.to raise_error(RubyEventStore::InvalidHandler)
113
- end
114
-
115
- it 'returns lambda as an output of global subscribe methods' do
116
- handler = TestHandler.new
117
- result = broker.add_global_subscriber(handler)
118
- expect(result).to respond_to(:call)
119
- end
120
-
121
- it 'returns lambda as an output of subscribe methods' do
122
- handler = TestHandler.new
123
- result = broker.add_subscriber(handler, [Test1DomainEvent, Test2DomainEvent])
124
- expect(result).to respond_to(:call)
125
- end
126
-
127
- it 'revokes global subscription' do
128
- handler = TestHandler.new
129
- event1 = Test1DomainEvent.new
130
- event2 = Test2DomainEvent.new
131
-
132
- revoke = broker.add_global_subscriber(handler)
133
- broker.notify_subscribers(event1)
134
- expect(handler.events).to eq([event1])
135
- revoke.()
136
- broker.notify_subscribers(event2)
137
- expect(handler.events).to eq([event1])
138
- end
139
-
140
- it 'revokes subscription' do
141
- handler = TestHandler.new
142
- event1 = Test1DomainEvent.new
143
- event2 = Test2DomainEvent.new
144
-
145
- revoke = broker.add_subscriber(handler, [Test1DomainEvent, Test2DomainEvent])
146
- broker.notify_subscribers(event1)
147
- expect(handler.events).to eq([event1])
148
- revoke.()
149
- broker.notify_subscribers(event2)
150
- expect(handler.events).to eq([event1])
151
- end
152
-
153
- it 'revokes thread global subscription' do
154
- handler = TestHandler.new
155
- event1 = Test1DomainEvent.new
156
- event2 = Test2DomainEvent.new
157
-
158
- revoke = broker.add_thread_global_subscriber(handler)
159
- broker.notify_subscribers(event1)
160
- expect(handler.events).to eq([event1])
161
- revoke.()
162
- broker.notify_subscribers(event2)
163
- expect(handler.events).to eq([event1])
164
- end
165
-
166
- it 'revokes thread subscription' do
167
- handler = TestHandler.new
168
- event1 = Test1DomainEvent.new
169
- event2 = Test2DomainEvent.new
170
-
171
- revoke = broker.add_thread_subscriber(handler, [Test1DomainEvent, Test2DomainEvent])
172
- broker.notify_subscribers(event1)
173
- expect(handler.events).to eq([event1])
174
- revoke.()
175
- broker.notify_subscribers(event2)
176
- expect(handler.events).to eq([event1])
177
- end
178
-
179
- it 'allows to provide a custom dispatcher' do
180
- dispatcher = TestDispatcher.new
181
- handler = TestHandler.new
182
- event1 = Test1DomainEvent.new
183
- broker_with_custom_dispatcher = broker_class.new(dispatcher: dispatcher)
184
- broker_with_custom_dispatcher.add_subscriber(handler, [Test1DomainEvent])
185
- broker_with_custom_dispatcher.notify_subscribers(event1)
186
- expect(dispatcher.dispatched).to eq([{subscriber: handler, event: event1}])
187
- end
188
-
189
- it 'subscribes by type of event which is a String' do
190
- handler = TestHandler.new
191
- broker.add_subscriber(handler, ["Test1DomainEvent"])
192
- broker.add_thread_subscriber(handler, ["Test1DomainEvent"])
193
-
194
- event1 = Test1DomainEvent.new
195
- broker.notify_subscribers(event1)
196
-
197
- expect(handler.events).to eq([event1,event1])
198
- end
199
-
200
- private
201
-
202
- class HandlerClass
203
- @@received = nil
204
- def self.received
205
- @@received
206
- end
207
- def call(event)
208
- @@received = event
209
- end
210
- end
211
- end