module Publicist::Publisher

Public Class Methods

included( other_module ) click to toggle source
# File lib/publicist/publisher.rb, line 4
def self.included( other_module )
  other_module.extend ClassMethods
end

Public Instance Methods

subscribe( publication, *subscribers, &last_subscriber ) click to toggle source
# File lib/publicist/publisher.rb, line 51
def subscribe( publication, *subscribers, &last_subscriber )
  redirected_subscribers = subscribers.extract_options!
  default_subscribers    = subscribers

  self.subscriptions[publication] ||= []

  default_subscribers.each do |subscriber_object_or_proc|
    subscriber_method = publication
    if subscriber_object_or_proc.respond_to?( subscriber_method )
      self.subscriptions[publication] << lambda { |*arguments|
        subscriber_object_or_proc.send( subscriber_method, *arguments )
      }
    elsif subscriber_object_or_proc.respond_to?( :call )
      self.subscriptions[publication] << subscriber_object_or_proc
    else
      raise ArgumentError.new( "Expected subscriber to respond to ##{subscriber_method} or #call" )
    end
  end
  self.subscriptions[publication] << last_subscriber if last_subscriber

  redirected_subscribers.each do |subscriber_object, subscriber_method|
    self.subscriptions[publication] << lambda { |*arguments|
      subscriber_object.send( subscriber_method, *arguments )
    }
  end
  self
end
subscribe!( publication, *subscribers, &last_subscriber ) click to toggle source

my_collaborator.subscribe :some_publication_name, subscriber_object my_collaborator.subscribe :some_publication_name, jason, subscriber_object => :subscriber_method, another_subscriber => :his_method my_collaborator.subscribe :some_publication_name, {subscriber_object => :subscriber_method, another_subscriber => :his_method} my_collaborator.subscribe :log_event, Rails.logger => :warn my_collaborator.subscribe :log_event do |options|

Do something here on the event

Rails.logger.warn options end my_collaborator.subscribe :log_event, lambda { |options|

Rails.logger.warn options[:message]

}, another_collaborator => :do_something

# File lib/publicist/publisher.rb, line 43
def subscribe!( publication, *subscribers, &last_subscriber )
  unless self.class.publications.include?( publication )
    raise ArgumentError.new( "#{self.class.name} does not publish #{publication.inspect}" )
  end

  subscribe( publication, *subscribers, &last_subscriber )
end

Protected Instance Methods

subscriptions() click to toggle source
# File lib/publicist/publisher.rb, line 81
def subscriptions
  @subscriptions ||= {}
end