main
1class EventAggregator
2 def initialize(subscribers = Hash.new([]))
3 @subscribers = subscribers
4 end
5
6 def publish(event, *args)
7 subscribers = subscribers_for(event)
8 subscribers.each do |subscriber|
9 subscriber.public_send(event, *args)
10 end
11 end
12
13 def subscribe(event, subscriber)
14 @subscribers[event] = [] unless @subscribers.key?(event)
15 @subscribers[event].push(subscriber)
16 end
17
18 private
19
20 def subscribers_for(event)
21 @subscribers[event.to_sym]
22 end
23end