Skip to content

Instantly share code, notes, and snippets.

@dgtm
Forked from practicingruby/x.rb
Created August 28, 2012 15:19
Show Gist options
  • Save dgtm/3499018 to your computer and use it in GitHub Desktop.
Save dgtm/3499018 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
class AutoPostMailer < Mailer
def analyze
with_autopost_template(@message)
end
end
class ManuallyPostedMailer < Mailer
def analyze
with_manual_mailer_template(@message)
end
end
class Job
@event_handler = EventHandler.new
@event_handler.on :auto_posted, AutoPostedMailer
@event_handler.on :auto_posted, RedisStats
@event_handler.on :manually_posted, ManuallyPostedMailer
def post
event_handler.trigger(:auto_posted, "Hello World")
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment