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.
- checksums.yaml +4 -4
- data/Gemfile +9 -1
- data/Makefile +15 -62
- data/lib/ruby_event_store/batch_enumerator.rb +15 -5
- data/lib/ruby_event_store/broker.rb +45 -0
- data/lib/ruby_event_store/client.rb +220 -130
- data/lib/ruby_event_store/composed_dispatcher.rb +24 -0
- data/lib/ruby_event_store/constants.rb +2 -0
- data/lib/ruby_event_store/correlated_commands.rb +42 -0
- data/lib/ruby_event_store/dispatcher.rb +20 -0
- data/lib/ruby_event_store/errors.rb +16 -16
- data/lib/ruby_event_store/event.rb +70 -14
- data/lib/ruby_event_store/expected_version.rb +2 -0
- data/lib/ruby_event_store/immediate_async_dispatcher.rb +17 -0
- data/lib/ruby_event_store/in_memory_repository.rb +45 -17
- data/lib/ruby_event_store/instrumented_dispatcher.rb +23 -0
- data/lib/ruby_event_store/instrumented_repository.rb +63 -0
- data/lib/ruby_event_store/link_by_metadata.rb +57 -0
- data/lib/ruby_event_store/mappers/default.rb +10 -26
- data/lib/ruby_event_store/mappers/encryption_key.rb +74 -0
- data/lib/ruby_event_store/mappers/encryption_mapper.rb +16 -0
- data/lib/ruby_event_store/mappers/forgotten_data.rb +30 -0
- data/lib/ruby_event_store/mappers/in_memory_encryption_key_repository.rb +34 -0
- data/lib/ruby_event_store/mappers/instrumented_mapper.rb +28 -0
- data/lib/ruby_event_store/mappers/json_mapper.rb +16 -0
- data/lib/ruby_event_store/mappers/null_mapper.rb +5 -8
- data/lib/ruby_event_store/mappers/pipeline.rb +31 -0
- data/lib/ruby_event_store/mappers/pipeline_mapper.rb +22 -0
- data/lib/ruby_event_store/mappers/protobuf.rb +13 -67
- data/lib/ruby_event_store/mappers/transformation/domain_event.rb +26 -0
- data/lib/ruby_event_store/mappers/transformation/encryption.rb +128 -0
- data/lib/ruby_event_store/mappers/transformation/event_class_remapper.rb +24 -0
- data/lib/ruby_event_store/mappers/transformation/item.rb +56 -0
- data/lib/ruby_event_store/mappers/transformation/proto_event.rb +17 -0
- data/lib/ruby_event_store/mappers/transformation/protobuf_encoder.rb +30 -0
- data/lib/ruby_event_store/mappers/transformation/protobuf_nested_struct_metadata.rb +30 -0
- data/lib/ruby_event_store/mappers/transformation/serialization.rb +34 -0
- data/lib/ruby_event_store/mappers/transformation/serialized_record.rb +27 -0
- data/lib/ruby_event_store/mappers/transformation/stringify_metadata_keys.rb +24 -0
- data/lib/ruby_event_store/mappers/transformation/symbolize_metadata_keys.rb +24 -0
- data/lib/ruby_event_store/metadata.rb +4 -2
- data/lib/ruby_event_store/projection.rb +34 -12
- data/lib/ruby_event_store/serialized_record.rb +3 -1
- data/lib/ruby_event_store/spec/broker_lint.rb +92 -0
- data/lib/ruby_event_store/spec/dispatcher_lint.rb +4 -36
- data/lib/ruby_event_store/spec/event_lint.rb +71 -0
- data/lib/ruby_event_store/spec/event_repository_lint.rb +1092 -962
- data/lib/ruby_event_store/spec/mapper_lint.rb +17 -0
- data/lib/ruby_event_store/spec/scheduler_lint.rb +9 -0
- data/lib/ruby_event_store/spec/subscriptions_lint.rb +111 -0
- data/lib/ruby_event_store/specification.rb +201 -56
- data/lib/ruby_event_store/specification_reader.rb +43 -0
- data/lib/ruby_event_store/specification_result.rb +212 -0
- data/lib/ruby_event_store/stream.rb +2 -0
- data/lib/ruby_event_store/subscriptions.rb +110 -0
- data/lib/ruby_event_store/transform_keys.rb +31 -0
- data/lib/ruby_event_store/version.rb +3 -1
- data/lib/ruby_event_store.rb +34 -4
- data/ruby_event_store.gemspec +1 -10
- metadata +47 -126
- data/exe/res-deprecated-read-api-migrator +0 -19
- data/lib/ruby_event_store/deprecated_read_api_rewriter.rb +0 -67
- data/lib/ruby_event_store/deprecated_read_api_runner.rb +0 -64
- data/lib/ruby_event_store/deprecations.rb +0 -7
- data/lib/ruby_event_store/pub_sub/broker.rb +0 -73
- data/lib/ruby_event_store/pub_sub/dispatcher.rb +0 -25
- 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
|