Sha256: 9ff4a0c1aaf35ccd3e530dd631f7a0f7778c10ef219272cb341faf62b5cc843b

Contents?: true

Size: 1.03 KB

Versions: 8

Compression:

Stored size: 1.03 KB

Contents

module Adva
  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

    def self.trigger(type, object, source, options = {})
      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

    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
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
adva-0.3.2 lib/adva/event.rb
adva-0.3.1 lib/adva/event.rb
adva-0.3.0 lib/adva/event.rb
adva-0.2.4 lib/adva/event.rb
adva-0.2.3 lib/adva/event.rb
adva-0.2.2 lib/adva/event.rb
adva-0.2.1 lib/adva/event.rb
adva-0.2.0 lib/adva/event.rb