ruby_event_store 0.30.0 → 0.31.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 +4 -4
- data/Makefile +6 -1
- data/lib/ruby_event_store.rb +5 -0
- data/lib/ruby_event_store/async_dispatcher.rb +20 -0
- data/lib/ruby_event_store/async_proxy_strategy.rb +9 -0
- data/lib/ruby_event_store/client.rb +204 -45
- data/lib/ruby_event_store/correlated_commands.rb +37 -0
- data/lib/ruby_event_store/event.rb +68 -1
- data/lib/ruby_event_store/link_by_metadata.rb +55 -0
- data/lib/ruby_event_store/mappers/null_mapper.rb +0 -1
- data/lib/ruby_event_store/mappers/protobuf.rb +13 -5
- data/lib/ruby_event_store/pub_sub/broker.rb +22 -50
- data/lib/ruby_event_store/pub_sub/dispatcher.rb +1 -1
- data/lib/ruby_event_store/pub_sub/subscriptions.rb +110 -0
- data/lib/ruby_event_store/spec/broker_lint.rb +76 -0
- data/lib/ruby_event_store/spec/dispatcher_lint.rb +8 -9
- data/lib/ruby_event_store/spec/event_repository_lint.rb +1 -0
- data/lib/ruby_event_store/spec/subscriptions_lint.rb +111 -0
- data/lib/ruby_event_store/specification.rb +60 -0
- data/lib/ruby_event_store/version.rb +1 -1
- metadata +9 -3
- data/lib/ruby_event_store/spec/event_broker_lint.rb +0 -211
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7bc6504270eee043e23b424f0aa08bb484d857629f28bda3332f1a7ba68afcef
|
4
|
+
data.tar.gz: 1088258a8ac91e24006ef5f9b12422a12bfaed0b00e264047b84fecafd060966
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d0ed208c9c47f2fdac29afa6206ae5d0d4eaeb3095abc416ed77239ab05d9b3b203181dd6cb88e3ad87e1c85c919785b56ecea1532c1e2fefb75e2c6d630531d
|
7
|
+
data.tar.gz: c4d92331c73f56c91ad6016407031e2407874589b0421d8cc9b0472d7f5bdbcac8b2e11579e00f8b7ae05f43ac554b8d92d892e7e12b78d88899c10ed6eb3b36
|
data/Makefile
CHANGED
@@ -15,7 +15,12 @@ IGNORE = RubyEventStore.const_missing \
|
|
15
15
|
RubyEventStore::Client\#read_events_forward \
|
16
16
|
RubyEventStore::Client\#read_events_backward \
|
17
17
|
RubyEventStore::DeprecatedReadAPIRunner* \
|
18
|
-
RubyEventStore::DeprecatedReadAPIRewriter*
|
18
|
+
RubyEventStore::DeprecatedReadAPIRewriter* \
|
19
|
+
RubyEventStore::Client\#publish_event \
|
20
|
+
RubyEventStore::Client\#publish_events \
|
21
|
+
RubyEventStore::Client\#link_to_stream \
|
22
|
+
RubyEventStore::Client\#append_to_stream \
|
23
|
+
|
19
24
|
SUBJECT ?= RubyEventStore*
|
20
25
|
|
21
26
|
install: ## Install gem dependencies
|
data/lib/ruby_event_store.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'ruby_event_store/pub_sub/dispatcher'
|
2
|
+
require 'ruby_event_store/pub_sub/subscriptions'
|
2
3
|
require 'ruby_event_store/pub_sub/broker'
|
3
4
|
require 'ruby_event_store/in_memory_repository'
|
4
5
|
require 'ruby_event_store/projection'
|
@@ -16,4 +17,8 @@ require 'ruby_event_store/mappers/default'
|
|
16
17
|
require 'ruby_event_store/mappers/protobuf'
|
17
18
|
require 'ruby_event_store/mappers/null_mapper'
|
18
19
|
require 'ruby_event_store/batch_enumerator'
|
20
|
+
require 'ruby_event_store/correlated_commands'
|
21
|
+
require 'ruby_event_store/link_by_metadata'
|
22
|
+
require 'ruby_event_store/async_proxy_strategy'
|
23
|
+
require 'ruby_event_store/async_dispatcher'
|
19
24
|
require 'ruby_event_store/version'
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module RubyEventStore
|
2
|
+
class AsyncDispatcher < PubSub::Dispatcher
|
3
|
+
def initialize(proxy_strategy: AsyncProxyStrategy::Inline.new, scheduler:)
|
4
|
+
@async_proxy_strategy = proxy_strategy
|
5
|
+
@scheduler = scheduler
|
6
|
+
end
|
7
|
+
|
8
|
+
def call(subscriber, _, serialized_event)
|
9
|
+
if @scheduler.async_handler?(subscriber)
|
10
|
+
@async_proxy_strategy.call(->{ @scheduler.call(subscriber, serialized_event) })
|
11
|
+
else
|
12
|
+
super
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def verify(subscriber)
|
17
|
+
super unless @scheduler.async_handler?(subscriber)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -1,49 +1,118 @@
|
|
1
|
+
require 'concurrent'
|
2
|
+
|
1
3
|
module RubyEventStore
|
2
4
|
class Client
|
5
|
+
|
3
6
|
def initialize(repository:,
|
4
7
|
mapper: Mappers::Default.new,
|
5
|
-
|
8
|
+
subscriptions: PubSub::Subscriptions.new,
|
9
|
+
dispatcher: PubSub::Dispatcher.new,
|
6
10
|
page_size: PAGE_SIZE,
|
7
|
-
metadata_proc: nil,
|
8
11
|
clock: ->{ Time.now.utc })
|
9
12
|
@repository = repository
|
10
13
|
@mapper = mapper
|
11
|
-
@
|
14
|
+
@broker = PubSub::Broker.new(subscriptions: subscriptions, dispatcher: dispatcher)
|
12
15
|
@page_size = page_size
|
13
|
-
warn "`RubyEventStore::Client#metadata_proc` has been deprecated. Use `RubyEventStore::Client#with_metadata` instead." if metadata_proc
|
14
|
-
@metadata_proc = metadata_proc
|
15
16
|
@clock = clock
|
17
|
+
@metadata = Concurrent::ThreadLocalVar.new
|
16
18
|
end
|
17
19
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
20
|
+
|
21
|
+
# Persists events and notifies subscribed handlers about them
|
22
|
+
#
|
23
|
+
# @param events [Array<Event, Proto>, Event, Proto] event(s)
|
24
|
+
# @param stream_name [String] name of the stream for persisting events.
|
25
|
+
# @param expected_version [:any, :auto, :none, Integer] controls optimistic locking strategy. {http://railseventstore.org/docs/expected_version/ Read more}
|
26
|
+
# @return [:ok]
|
27
|
+
def publish(events, stream_name: GLOBAL_STREAM, expected_version: :any)
|
28
|
+
enriched_events = enrich_events_metadata(events)
|
29
|
+
serialized_events = serialize_events(enriched_events)
|
30
|
+
append_to_stream_serialized_events(serialized_events, stream_name: stream_name, expected_version: expected_version)
|
31
|
+
enriched_events.zip(serialized_events) do |event, serialized_event|
|
32
|
+
with_metadata(
|
33
|
+
correlation_id: event.metadata[:correlation_id] || event.event_id,
|
34
|
+
causation_id: event.event_id,
|
35
|
+
) do
|
36
|
+
broker.(event, serialized_event)
|
37
|
+
end
|
22
38
|
end
|
23
39
|
:ok
|
24
40
|
end
|
25
41
|
|
42
|
+
# @deprecated Use {#publish} instead
|
43
|
+
def publish_events(events, stream_name: GLOBAL_STREAM, expected_version: :any)
|
44
|
+
warn <<~EOW
|
45
|
+
RubyEventStore::Client#publish_events has been deprecated.
|
46
|
+
|
47
|
+
Use RubyEventStore::Client#publish instead
|
48
|
+
EOW
|
49
|
+
publish(events, stream_name: stream_name, expected_version: expected_version)
|
50
|
+
end
|
51
|
+
|
52
|
+
# @deprecated Use {#publish} instead
|
26
53
|
def publish_event(event, stream_name: GLOBAL_STREAM, expected_version: :any)
|
27
|
-
|
54
|
+
warn <<~EOW
|
55
|
+
RubyEventStore::Client#publish_event has been deprecated.
|
56
|
+
|
57
|
+
Use RubyEventStore::Client#publish instead
|
58
|
+
EOW
|
59
|
+
publish(event, stream_name: stream_name, expected_version: expected_version)
|
28
60
|
end
|
29
61
|
|
62
|
+
# @deprecated Use {#append} instead
|
30
63
|
def append_to_stream(events, stream_name: GLOBAL_STREAM, expected_version: :any)
|
31
|
-
|
32
|
-
|
33
|
-
|
64
|
+
warn <<~EOW
|
65
|
+
RubyEventStore::Client#append_to_stream has been deprecated.
|
66
|
+
|
67
|
+
Use RubyEventStore::Client#append instead
|
68
|
+
EOW
|
69
|
+
append(events, stream_name: stream_name, expected_version: expected_version)
|
70
|
+
end
|
71
|
+
|
72
|
+
# Persists new event(s) without notifying any subscribed handlers
|
73
|
+
#
|
74
|
+
# @param (see #publish)
|
75
|
+
# @return [:ok]
|
76
|
+
def append(events, stream_name: GLOBAL_STREAM, expected_version: :any)
|
77
|
+
serialized_events = serialize_events(enrich_events_metadata(events))
|
78
|
+
append_to_stream_serialized_events(serialized_events, stream_name: stream_name, expected_version: expected_version)
|
34
79
|
:ok
|
35
80
|
end
|
36
81
|
|
37
|
-
|
82
|
+
# Links already persisted event(s) to a different stream.
|
83
|
+
# Does not notify any subscribed handlers.
|
84
|
+
#
|
85
|
+
# @param event_ids [String, Array<String>] ids of events
|
86
|
+
# @param stream_name (see #publish)
|
87
|
+
# @param expected_version (see #publish)
|
88
|
+
# @return [self]
|
89
|
+
def link(event_ids, stream_name:, expected_version: :any)
|
38
90
|
repository.link_to_stream(event_ids, Stream.new(stream_name), ExpectedVersion.new(expected_version))
|
39
91
|
self
|
40
92
|
end
|
41
93
|
|
94
|
+
# @deprecated Use {#link} instead
|
95
|
+
def link_to_stream(event_ids, stream_name:, expected_version: :any)
|
96
|
+
warn <<~EOW
|
97
|
+
RubyEventStore::Client#link_to_stream has been deprecated.
|
98
|
+
|
99
|
+
Use RubyEventStore::Client#link instead
|
100
|
+
EOW
|
101
|
+
link(event_ids, stream_name: stream_name, expected_version: expected_version)
|
102
|
+
end
|
103
|
+
|
104
|
+
# Deletes a stream.
|
105
|
+
# All events from the stream remain intact but they are no
|
106
|
+
# longer linked to the stream.
|
107
|
+
#
|
108
|
+
# @param stream_name [String] name of the stream to be cleared.
|
109
|
+
# @return [:ok]
|
42
110
|
def delete_stream(stream_name)
|
43
111
|
repository.delete_stream(Stream.new(stream_name))
|
44
112
|
:ok
|
45
113
|
end
|
46
114
|
|
115
|
+
# @deprecated Use {#read} instead. {https://github.com/RailsEventStore/rails_event_store/releases/tag/v0.30.0 More info}
|
47
116
|
def read_events_forward(stream_name, start: :head, count: page_size)
|
48
117
|
warn <<~EOW
|
49
118
|
RubyEventStore::Client#read_events_forward has been deprecated.
|
@@ -54,6 +123,7 @@ module RubyEventStore
|
|
54
123
|
read.stream(stream_name).limit(count).from(start).each.to_a
|
55
124
|
end
|
56
125
|
|
126
|
+
# @deprecated Use {#read} instead. {https://github.com/RailsEventStore/rails_event_store/releases/tag/v0.30.0 More info}
|
57
127
|
def read_events_backward(stream_name, start: :head, count: page_size)
|
58
128
|
warn <<~EOW
|
59
129
|
RubyEventStore::Client#read_events_backward has been deprecated.
|
@@ -64,6 +134,7 @@ module RubyEventStore
|
|
64
134
|
read.stream(stream_name).limit(count).from(start).backward.each.to_a
|
65
135
|
end
|
66
136
|
|
137
|
+
# @deprecated Use {#read} instead. {https://github.com/RailsEventStore/rails_event_store/releases/tag/v0.30.0 More info}
|
67
138
|
def read_stream_events_forward(stream_name)
|
68
139
|
warn <<~EOW
|
69
140
|
RubyEventStore::Client#read_stream_events_forward has been deprecated.
|
@@ -74,6 +145,7 @@ module RubyEventStore
|
|
74
145
|
read.stream(stream_name).each.to_a
|
75
146
|
end
|
76
147
|
|
148
|
+
# @deprecated Use {#read} instead. {https://github.com/RailsEventStore/rails_event_store/releases/tag/v0.30.0 More info}
|
77
149
|
def read_stream_events_backward(stream_name)
|
78
150
|
warn <<~EOW
|
79
151
|
RubyEventStore::Client#read_stream_events_backward has been deprecated.
|
@@ -84,6 +156,7 @@ module RubyEventStore
|
|
84
156
|
read.stream(stream_name).backward.each.to_a
|
85
157
|
end
|
86
158
|
|
159
|
+
# @deprecated Use {#read} instead. {https://github.com/RailsEventStore/rails_event_store/releases/tag/v0.30.0 More info}
|
87
160
|
def read_all_streams_forward(start: :head, count: page_size)
|
88
161
|
warn <<~EOW
|
89
162
|
RubyEventStore::Client#read_all_streams_forward has been deprecated.
|
@@ -94,6 +167,7 @@ module RubyEventStore
|
|
94
167
|
read.limit(count).from(start).each.to_a
|
95
168
|
end
|
96
169
|
|
170
|
+
# @deprecated Use {#read} instead. {https://github.com/RailsEventStore/rails_event_store/releases/tag/v0.30.0 More info}
|
97
171
|
def read_all_streams_backward(start: :head, count: page_size)
|
98
172
|
warn <<~EOW
|
99
173
|
RubyEventStore::Client#read_all_streams_backward has been deprecated.
|
@@ -104,70 +178,125 @@ module RubyEventStore
|
|
104
178
|
read.limit(count).from(start).backward.each.to_a
|
105
179
|
end
|
106
180
|
|
181
|
+
# Returns a single, persisted event based on its ID.
|
182
|
+
#
|
183
|
+
# @param event_id [String] event id
|
184
|
+
# @return [Event, Proto]
|
107
185
|
def read_event(event_id)
|
108
186
|
deserialize_event(repository.read_event(event_id))
|
109
187
|
end
|
110
188
|
|
189
|
+
# Starts building a query specification for reading events.
|
190
|
+
# {http://railseventstore.org/docs/read/ More info.}
|
191
|
+
#
|
192
|
+
# @return [Specification]
|
111
193
|
def read
|
112
194
|
Specification.new(repository, mapper)
|
113
195
|
end
|
114
196
|
|
115
|
-
#
|
116
|
-
#
|
197
|
+
# Subscribes a handler (subscriber) that will be invoked for published events of provided type.
|
198
|
+
#
|
199
|
+
# @overload subscribe(subscriber, to:)
|
200
|
+
# @param to [Array<Class>] types of events to subscribe
|
201
|
+
# @param subscriber [Object, Class] handler
|
202
|
+
# @return [Proc] - unsubscribe proc. Call to unsubscribe.
|
203
|
+
# @raise [ArgumentError, SubscriberNotExist]
|
204
|
+
# @overload subscribe(to:, &subscriber)
|
205
|
+
# @param to [Array<Class>] types of events to subscribe
|
206
|
+
# @param subscriber [Proc] handler
|
207
|
+
# @return [Proc] - unsubscribe proc. Call to unsubscribe.
|
208
|
+
# @raise [ArgumentError, SubscriberNotExist]
|
117
209
|
def subscribe(subscriber = nil, to:, &proc)
|
118
210
|
raise ArgumentError, "subscriber must be first argument or block, cannot be both" if subscriber && proc
|
119
|
-
raise SubscriberNotExist, "subscriber must be first argument or block" unless subscriber || proc
|
120
211
|
subscriber ||= proc
|
121
|
-
|
212
|
+
broker.add_subscription(subscriber, to)
|
122
213
|
end
|
123
214
|
|
124
|
-
#
|
125
|
-
#
|
215
|
+
# Subscribes a handler (subscriber) that will be invoked for all published events
|
216
|
+
#
|
217
|
+
# @overload subscribe_to_all_events(subscriber)
|
218
|
+
# @param subscriber [Object, Class] handler
|
219
|
+
# @return [Proc] - unsubscribe proc. Call to unsubscribe.
|
220
|
+
# @raise [ArgumentError, SubscriberNotExist]
|
221
|
+
# @overload subscribe_to_all_events(&subscriber)
|
222
|
+
# @param subscriber [Proc] handler
|
223
|
+
# @return [Proc] - unsubscribe proc. Call to unsubscribe.
|
224
|
+
# @raise [ArgumentError, SubscriberNotExist]
|
126
225
|
def subscribe_to_all_events(subscriber = nil, &proc)
|
127
226
|
raise ArgumentError, "subscriber must be first argument or block, cannot be both" if subscriber && proc
|
128
|
-
|
129
|
-
event_broker.add_global_subscriber(subscriber || proc)
|
227
|
+
broker.add_global_subscription(subscriber || proc)
|
130
228
|
end
|
131
229
|
|
230
|
+
# Builder object for collecting temporary handlers (subscribers)
|
231
|
+
# which are active only during the invocation of the provided
|
232
|
+
# block of code.
|
132
233
|
class Within
|
133
|
-
def initialize(block,
|
234
|
+
def initialize(block, broker)
|
134
235
|
@block = block
|
135
|
-
@
|
236
|
+
@broker = broker
|
136
237
|
@global_subscribers = []
|
137
238
|
@subscribers = Hash.new {[]}
|
138
239
|
end
|
139
240
|
|
241
|
+
# Subscribes temporary handlers that
|
242
|
+
# will be called for all published events.
|
243
|
+
# The subscription is active only during the invocation
|
244
|
+
# of the block of code provided to {Client#within}.
|
245
|
+
# {http://railseventstore.org/docs/subscribe/#temporary-subscriptions Read more.}
|
246
|
+
#
|
247
|
+
# @param handlers [Object, Class] handlers passed as objects or classes
|
248
|
+
# @param handler2 [Proc] handler passed as proc
|
249
|
+
# @return [self]
|
140
250
|
def subscribe_to_all_events(*handlers, &handler2)
|
141
251
|
handlers << handler2 if handler2
|
142
252
|
@global_subscribers += handlers
|
143
253
|
self
|
144
254
|
end
|
145
255
|
|
256
|
+
# Subscribes temporary handlers that
|
257
|
+
# will be called for published events of provided type.
|
258
|
+
# The subscription is active only during the invocation
|
259
|
+
# of the block of code provided to {Client#within}.
|
260
|
+
# {http://railseventstore.org/docs/subscribe/#temporary-subscriptions Read more.}
|
261
|
+
#
|
262
|
+
# @overload subscribe(handler, to:)
|
263
|
+
# @param handler [Object, Class] handler passed as objects or classes
|
264
|
+
# @param to [Array<Class>] types of events to subscribe
|
265
|
+
# @return [self]
|
266
|
+
# @overload subscribe(to:, &handler)
|
267
|
+
# @param to [Array<Class>] types of events to subscribe
|
268
|
+
# @param handler [Proc] handler passed as proc
|
269
|
+
# @return [self]
|
146
270
|
def subscribe(handler=nil, to:, &handler2)
|
147
271
|
raise ArgumentError if handler && handler2
|
148
272
|
@subscribers[handler || handler2] += normalize_to_array(to)
|
149
273
|
self
|
150
274
|
end
|
151
275
|
|
276
|
+
# Invokes the block of code provided to {Client#within}
|
277
|
+
# and then unsubscribes temporary handlers.
|
278
|
+
# {http://railseventstore.org/docs/subscribe/#temporary-subscriptions Read more.}
|
279
|
+
#
|
280
|
+
# @return [Object] value returned by the invoked block of code
|
152
281
|
def call
|
153
282
|
unsubs = add_thread_global_subscribers
|
154
283
|
unsubs += add_thread_subscribers
|
155
284
|
@block.call
|
156
285
|
ensure
|
157
|
-
unsubs.each(&:call)
|
286
|
+
unsubs.each(&:call) if unsubs
|
158
287
|
end
|
159
288
|
|
160
289
|
private
|
161
290
|
|
162
291
|
def add_thread_subscribers
|
163
|
-
@subscribers.map do |
|
164
|
-
@
|
292
|
+
@subscribers.map do |subscriber, types|
|
293
|
+
@broker.add_thread_subscription(subscriber, types)
|
165
294
|
end
|
166
295
|
end
|
167
296
|
|
168
297
|
def add_thread_global_subscribers
|
169
|
-
@global_subscribers.map do |
|
170
|
-
@
|
298
|
+
@global_subscribers.map do |subscriber|
|
299
|
+
@broker.add_thread_global_subscription(subscriber)
|
171
300
|
end
|
172
301
|
end
|
173
302
|
|
@@ -176,22 +305,52 @@ module RubyEventStore
|
|
176
305
|
end
|
177
306
|
end
|
178
307
|
|
308
|
+
# Use for starting temporary subscriptions.
|
309
|
+
# {http://railseventstore.org/docs/subscribe/#temporary-subscriptions Read more}
|
310
|
+
#
|
311
|
+
# @param block [Proc] block of code during which the temporary subscriptions will be active
|
312
|
+
# @return [Within] builder object which collects temporary subscriptions
|
179
313
|
def within(&block)
|
180
314
|
raise ArgumentError if block.nil?
|
181
|
-
Within.new(block,
|
315
|
+
Within.new(block, broker)
|
182
316
|
end
|
183
317
|
|
318
|
+
# Set additional metadata for all events published within the provided block
|
319
|
+
# {http://railseventstore.org/docs/request_metadata#passing-your-own-metadata-using-with_metadata-method Read more}
|
320
|
+
#
|
321
|
+
# @param metadata [Hash] metadata to set for events
|
322
|
+
# @param block [Proc] block of code during which the metadata will be added
|
323
|
+
# @return [Object] last value returned by the provided block
|
184
324
|
def with_metadata(metadata, &block)
|
185
325
|
previous_metadata = metadata()
|
186
|
-
self.metadata =
|
326
|
+
self.metadata = previous_metadata.merge(metadata)
|
187
327
|
block.call if block_given?
|
188
328
|
ensure
|
189
329
|
self.metadata = previous_metadata
|
190
330
|
end
|
191
331
|
|
332
|
+
# Deserialize event which was serialized for async event handlers
|
333
|
+
# {http://railseventstore.org/docs/subscribe/#async-handlers Read more}
|
334
|
+
#
|
335
|
+
# @return [Event, Proto] deserialized event
|
336
|
+
def deserialize(event_type:, event_id:, data:, metadata:)
|
337
|
+
mapper.serialized_record_to_event(SerializedRecord.new(event_type: event_type, event_id: event_id, data: data, metadata: metadata))
|
338
|
+
end
|
339
|
+
|
340
|
+
# Read additional metadata which will be added for published events
|
341
|
+
# {http://railseventstore.org/docs/request_metadata#passing-your-own-metadata-using-with_metadata-method Read more}
|
342
|
+
#
|
343
|
+
# @return [Hash]
|
344
|
+
def metadata
|
345
|
+
@metadata.value || EMPTY_HASH
|
346
|
+
end
|
347
|
+
|
348
|
+
EMPTY_HASH = {}.freeze
|
349
|
+
private_constant :EMPTY_HASH
|
350
|
+
|
192
351
|
private
|
193
352
|
|
194
|
-
def
|
353
|
+
def serialize_events(events)
|
195
354
|
events.map do |ev|
|
196
355
|
mapper.event_to_serialized_record(ev)
|
197
356
|
end
|
@@ -205,27 +364,27 @@ module RubyEventStore
|
|
205
364
|
return *events
|
206
365
|
end
|
207
366
|
|
367
|
+
def enrich_events_metadata(events)
|
368
|
+
events = normalize_to_array(events)
|
369
|
+
events.each{|event| enrich_event_metadata(event) }
|
370
|
+
events
|
371
|
+
end
|
372
|
+
|
208
373
|
def enrich_event_metadata(event)
|
209
|
-
|
210
|
-
md = metadata_proc.call || {}
|
211
|
-
md.each{|k,v| event.metadata[k]=(v) }
|
212
|
-
end
|
213
|
-
if metadata
|
214
|
-
metadata.each { |key, value| event.metadata[key] = value }
|
215
|
-
end
|
374
|
+
metadata.each { |key, value| event.metadata[key] ||= value }
|
216
375
|
event.metadata[:timestamp] ||= clock.call
|
217
376
|
end
|
218
377
|
|
219
|
-
|
378
|
+
def append_to_stream_serialized_events(serialized_events, stream_name:, expected_version:)
|
379
|
+
repository.append_to_stream(serialized_events, Stream.new(stream_name), ExpectedVersion.new(expected_version))
|
380
|
+
end
|
220
381
|
|
221
382
|
protected
|
222
383
|
|
223
|
-
def metadata
|
224
|
-
Thread.current["ruby_event_store_#{hash}"]
|
225
|
-
end
|
226
|
-
|
227
384
|
def metadata=(value)
|
228
|
-
|
385
|
+
@metadata.value = value
|
229
386
|
end
|
387
|
+
|
388
|
+
attr_reader :repository, :mapper, :broker, :clock, :page_size
|
230
389
|
end
|
231
390
|
end
|