Skip to content

Instantly share code, notes, and snippets.

@practicingruby
Created August 28, 2012 15:11
Show Gist options
  • Save practicingruby/3498939 to your computer and use it in GitHub Desktop.
Save practicingruby/3498939 to your computer and use it in GitHub Desktop.
class EventHandler
def initialize
@callbacks = Hash.new { |h,k| h[k] = [] }
end
def on(event, callback)
@callbacks[event] << callback
end
def trigger(event, *args)
@callbacks[event].each { |callback| callback.call(*args) }
end
end
class Mailer
def self.call(message)
new(message).deliver
end
def initialize(message)
@message = message
end
def deliver
puts @message
end
end
class RedisStats
def self.call(message)
new(message).analyze
end
def initialize(message)
@message = message
end
def analyze
puts @message.length
end
end
event_handler = EventHandler.new
event_handler.on :auto_posted, Mailer
event_handler.on :auto_posted, RedisStats
event_handler.trigger(:auto_posted, "Hello World")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment