Skip to content

Commit dd7a7a0

Browse files
committed
Add event resolver to projection
5cd0154#r100429552
1 parent d3463ed commit dd7a7a0

File tree

2 files changed

+24
-9
lines changed

2 files changed

+24
-9
lines changed

ruby_event_store/lib/ruby_event_store/projection.rb

+5-4
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,21 @@ module RubyEventStore
44
class Projection
55
private_class_method :new
66

7-
def initialize(initial_state = nil)
7+
def initialize(initial_state = nil, event_type_resolver)
88
@handlers = {}
9+
@event_type_resolver = event_type_resolver
910
@init = -> { initial_state }
1011
end
1112

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)
1415
end
1516

1617
def on(*event_klasses, &block)
1718
raise(ArgumentError, 'No handler block given') unless block_given?
1819

1920
event_klasses.each do |event_klass|
20-
name = event_klass.to_s
21+
name = @event_type_resolver.call(event_klass)
2122

2223
@handlers[name] = ->(state, event) { block.call(state, event) }
2324
end

ruby_event_store/spec/projection_spec.rb

+19-5
Original file line numberDiff line numberDiff line change
@@ -229,15 +229,29 @@ module RubyEventStore
229229
expect(state).to eq(initial_state)
230230
end
231231

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+
233239
class Snowflake < Event
234-
def self.event_type
240+
def self.resolves_as
241+
"snowflake"
242+
end
243+
244+
def event_type
235245
"snowflake"
236246
end
237247
end
238248

239249
class SnowflakeV2 < Event
240-
def self.event_type
250+
def self.resolves_as
251+
"snowflake"
252+
end
253+
254+
def event_type
241255
"snowflake"
242256
end
243257
end
@@ -247,9 +261,9 @@ def self.event_type
247261

248262
state =
249263
Projection
250-
.init({ snowflake: 0 })
264+
.init({ snowflake: 0 }, event_type_resolver: CustomResolver.new)
251265
.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)
253267
state
254268
end
255269
.call(event_store.read.stream("snowflake$1"))

0 commit comments

Comments
 (0)