Skip to content

Instantly share code, notes, and snippets.

@gma
Created August 20, 2014 06:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gma/2e2dea65aba2dc958c90 to your computer and use it in GitHub Desktop.
Save gma/2e2dea65aba2dc958c90 to your computer and use it in GitHub Desktop.
module Publisher
def self.included(base)
base.instance_eval do
def republish(*messages)
messages.each do |message|
define_method(message) do |args|
publish(message, *args)
end
end
end
end
end
def add_subscriber(subscriber)
@subscribers ||= []
@subscribers << subscriber
end
def add_subscribers(subscribers)
subscribers.each { |subscriber| add_subscriber(subscriber) }
end
def publish(message, *args)
return if @subscribers.blank?
@subscribers.each do |subscriber|
subscriber.send(message, *args) if subscriber.respond_to?(message)
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment