Skip to content

Commit 99e9c26

Browse files
committed
Subscriptions don't transform class to event_type
Their scope is limited to event_type. Let facade od that heavy lifiting.
1 parent 1faf920 commit 99e9c26

File tree

3 files changed

+18
-25
lines changed

3 files changed

+18
-25
lines changed

ruby_event_store/lib/ruby_event_store/client.rb

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ def initialize(
2222
@event_type_resolver = subscriptions.event_type_resolver
2323
end
2424

25-
2625
# Persists events and notifies subscribed handlers about them
2726
#
2827
# @param events [Array<Event>, Event] event(s)
@@ -110,7 +109,7 @@ def streams_of(event_id)
110109
def subscribe(subscriber = nil, to:, &proc)
111110
raise ArgumentError, "subscriber must be first argument or block, cannot be both" if subscriber && proc
112111
subscriber ||= proc
113-
broker.add_subscription(subscriber, to)
112+
broker.add_subscription(subscriber, to.map(&event_type_resolver))
114113
end
115114

116115
# Subscribes a handler (subscriber) that will be invoked for all published events
@@ -140,11 +139,12 @@ def subscribers_for(event_class)
140139
# which are active only during the invocation of the provided
141140
# block of code.
142141
class Within
143-
def initialize(block, broker)
142+
def initialize(block, broker, resolver)
144143
@block = block
145144
@broker = broker
146145
@global_subscribers = []
147146
@subscribers = Hash.new {[]}
147+
@resolver = resolver
148148
end
149149

150150
# Subscribes temporary handlers that
@@ -176,9 +176,9 @@ def subscribe_to_all_events(*handlers, &handler2)
176176
# @param to [Array<Class>] types of events to subscribe
177177
# @param handler [Proc] handler passed as proc
178178
# @return [self]
179-
def subscribe(handler=nil, to:, &handler2)
179+
def subscribe(handler = nil, to:, &handler2)
180180
raise ArgumentError if handler && handler2
181-
@subscribers[handler || handler2] += Array(to)
181+
@subscribers[handler || handler2] += Array(to).map(&resolver)
182182
self
183183
end
184184

@@ -196,6 +196,7 @@ def call
196196
end
197197

198198
private
199+
attr_reader :resolver
199200

200201
def add_thread_subscribers
201202
@subscribers.map do |subscriber, types|
@@ -217,7 +218,7 @@ def add_thread_global_subscribers
217218
# @return [Within] builder object which collects temporary subscriptions
218219
def within(&block)
219220
raise ArgumentError if block.nil?
220-
Within.new(block, broker)
221+
Within.new(block, broker, event_type_resolver)
221222
end
222223

223224
# Set additional metadata for all events published within the provided block

ruby_event_store/lib/ruby_event_store/spec/subscriptions_lint.rb

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@ def call(event)
2222
another_handler = TestHandler.new
2323
global_handler = TestHandler.new
2424

25-
subscriptions.add_subscription(handler, [Test1DomainEvent, Test3DomainEvent])
26-
subscriptions.add_subscription(another_handler, [Test2DomainEvent])
25+
subscriptions.add_subscription(handler, ['Test1DomainEvent', 'Test3DomainEvent'])
26+
subscriptions.add_subscription(another_handler, ['Test2DomainEvent'])
2727
subscriptions.add_global_subscription(global_handler)
2828

2929
expect(subscriptions.all_for('Test1DomainEvent')).to eq([handler, global_handler])
@@ -36,11 +36,11 @@ def call(event)
3636
another_handler = TestHandler.new
3737
global_handler = TestHandler.new
3838

39-
subscriptions.add_thread_subscription(handler, [Test1DomainEvent, Test3DomainEvent])
40-
subscriptions.add_thread_subscription(another_handler, [Test2DomainEvent])
39+
subscriptions.add_thread_subscription(handler, ['Test1DomainEvent', 'Test3DomainEvent'])
40+
subscriptions.add_thread_subscription(another_handler, ['Test2DomainEvent'])
4141
subscriptions.add_thread_global_subscription(global_handler)
4242
t = Thread.new do
43-
subscriptions.add_thread_subscription(handler, [Test2DomainEvent])
43+
subscriptions.add_thread_subscription(handler, ['Test2DomainEvent'])
4444
subscriptions.add_thread_global_subscription(another_handler)
4545
expect(subscriptions.all_for('Test2DomainEvent')).to eq([another_handler, handler])
4646
end
@@ -77,7 +77,7 @@ def call(event)
7777
it 'revokes subscription' do
7878
handler = TestHandler.new
7979

80-
revoke = subscriptions.add_subscription(handler, [Test1DomainEvent, Test2DomainEvent])
80+
revoke = subscriptions.add_subscription(handler, ['Test1DomainEvent', 'Test2DomainEvent'])
8181
expect(subscriptions.all_for('Test1DomainEvent')).to eq([handler])
8282
expect(subscriptions.all_for('Test2DomainEvent')).to eq([handler])
8383
revoke.()
@@ -99,7 +99,7 @@ def call(event)
9999
it 'revokes thread subscription' do
100100
handler = TestHandler.new
101101

102-
revoke = subscriptions.add_thread_subscription(handler, [Test1DomainEvent, Test2DomainEvent])
102+
revoke = subscriptions.add_thread_subscription(handler, ['Test1DomainEvent', 'Test2DomainEvent'])
103103
expect(subscriptions.all_for('Test1DomainEvent')).to eq([handler])
104104
expect(subscriptions.all_for('Test2DomainEvent')).to eq([handler])
105105
revoke.()
@@ -117,8 +117,8 @@ def call(event)
117117

118118
it 'subscribes by type of event which is a class' do
119119
handler = TestHandler.new
120-
subscriptions.add_subscription(handler, [Test1DomainEvent])
121-
subscriptions.add_thread_subscription(handler, [Test1DomainEvent])
120+
subscriptions.add_subscription(handler, ['Test1DomainEvent'])
121+
subscriptions.add_thread_subscription(handler, ['Test1DomainEvent'])
122122

123123
expect(subscriptions.all_for('Test1DomainEvent')).to eq([handler, handler])
124124
end

ruby_event_store/lib/ruby_event_store/subscriptions.rb

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,15 @@ def initialize(event_type_resolver: default_event_type_resolver)
1212
end
1313

1414
def add_subscription(subscriber, event_types)
15-
local.add(subscriber, resolve_event_types(event_types))
15+
local.add(subscriber, event_types)
1616
end
1717

1818
def add_global_subscription(subscriber)
1919
global.add(subscriber)
2020
end
2121

2222
def add_thread_subscription(subscriber, event_types)
23-
thread.local.add(subscriber, resolve_event_types(event_types))
23+
thread.local.add(subscriber, event_types)
2424
end
2525

2626
def add_thread_global_subscription(subscriber)
@@ -40,14 +40,6 @@ def default_event_type_resolver
4040
->(value) { value.to_s }
4141
end
4242

43-
def resolve_event_types(event_types)
44-
event_types.map(&method(:resolve_event_type))
45-
end
46-
47-
def resolve_event_type(type)
48-
event_type_resolver.call(type)
49-
end
50-
5143
class ThreadSubscriptions
5244
def initialize
5345
@local = ThreadLocalSubscriptions.new

0 commit comments

Comments
 (0)