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