File tree 2 files changed +24
-9
lines changed
2 files changed +24
-9
lines changed Original file line number Diff line number Diff line change @@ -4,20 +4,21 @@ module RubyEventStore
4
4
class Projection
5
5
private_class_method :new
6
6
7
- def initialize ( initial_state = nil )
7
+ def initialize ( initial_state = nil , event_type_resolver )
8
8
@handlers = { }
9
+ @event_type_resolver = event_type_resolver
9
10
@init = -> { initial_state }
10
11
end
11
12
12
- def self . init ( initial_state = nil )
13
- new ( initial_state )
13
+ def self . init ( initial_state = nil , event_type_resolver : EventTypeResolver . new )
14
+ new ( initial_state , event_type_resolver )
14
15
end
15
16
16
17
def on ( *event_klasses , &block )
17
18
raise ( ArgumentError , 'No handler block given' ) unless block_given?
18
19
19
20
event_klasses . each do |event_klass |
20
- name = event_klass . to_s
21
+ name = @event_type_resolver . call ( event_klass )
21
22
22
23
@handlers [ name ] = -> ( state , event ) { block . call ( state , event ) }
23
24
end
Original file line number Diff line number Diff line change @@ -229,15 +229,29 @@ module RubyEventStore
229
229
expect ( state ) . to eq ( initial_state )
230
230
end
231
231
232
- specify "events with event type defined as class method" do
232
+ specify "events with custom event type" do
233
+ class CustomResolver
234
+ def call ( event )
235
+ event . resolves_as
236
+ end
237
+ end
238
+
233
239
class Snowflake < Event
234
- def self . event_type
240
+ def self . resolves_as
241
+ "snowflake"
242
+ end
243
+
244
+ def event_type
235
245
"snowflake"
236
246
end
237
247
end
238
248
239
249
class SnowflakeV2 < Event
240
- def self . event_type
250
+ def self . resolves_as
251
+ "snowflake"
252
+ end
253
+
254
+ def event_type
241
255
"snowflake"
242
256
end
243
257
end
@@ -247,9 +261,9 @@ def self.event_type
247
261
248
262
state =
249
263
Projection
250
- . init ( { snowflake : 0 } )
264
+ . init ( { snowflake : 0 } , event_type_resolver : CustomResolver . new )
251
265
. on ( Snowflake , SnowflakeV2 ) do |state , event |
252
- state [ event . class . event_type . to_sym ] += event . data . fetch ( :arms )
266
+ state [ :snowflake ] += event . data . fetch ( :arms )
253
267
state
254
268
end
255
269
. call ( event_store . read . stream ( "snowflake$1" ) )
You can’t perform that action at this time.
0 commit comments