Sha256: 6fc1ce7c9eed16d315c5e57c76f148cffb3612ada2893c073fbee9321adddffa

Contents?: true

Size: 1.01 KB

Versions: 7

Compression:

Stored size: 1.01 KB

Contents

class Event
  cattr_accessor :observers
  @@observers = []

  attr_reader :type        # what happened
  attr_reader :object      # the object that the event is about, e.g. payment
  attr_reader :source      # the origin or the event, e.g. payment processor
  attr_reader :options     # optional options for the event

  class << self
    def trigger(type, object, source, options = {})
      event = Event.new(type, object, source, options)
      observers.each do |observer|
        observer = observer.constantize if observer.is_a?(String)
        callback = :"handle_#{event.type}!"

        if observer.respond_to?(callback)
          observer.send(callback, event)
        elsif observer.respond_to?(:handle_event!)
          observer.handle_event!(event)
        end
      end
    end
  end

  def initialize(type, object, source, options = {})
    @type, @object, @source, @options = type, object, source, options
  end

  def method_missing(name, *args)
    return @options[name] if @options.has_key?(name)
    super
  end
end

Version data entries

7 entries across 7 versions & 2 rubygems

Version Path
adva-0.1.4 app/models/event.rb
adva-0.1.3 app/models/event.rb
adva-0.1.2 app/models/event.rb
adva-0.1.1 app/models/event.rb
adva-0.1.0 app/models/event.rb
adva_cms-0.0.1 app/models/event.rb
adva-0.0.1 adva_cms/app/models/event.rb