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
|