Sha256: f3c4ca292c71d208c77170b148d49d373d149fcde2c3b1c5408608be80ac4fd3

Contents?: true

Size: 1.38 KB

Versions: 5

Compression:

Stored size: 1.38 KB

Contents

module Cloudfuji
  class Data #:nodoc:
    @@observers = []

    def self.add_observer(observer)
      puts "Subscribing #{observer} to Cloudfuji data calls"
      @@observers << observer
    end
    
    def self.fire(data, event)
      puts "Cloudfuji Hooks Firing #{event} with => #{data.inspect}"

      processed = false

      @@observers.each do |observer|
        puts "#{observer}.respond_to?(#{event}) => #{observer.respond_to?(event)}"

        if observer.respond_to?(event)
          processed = true

          # Make a copy of the data so it's not mutated as the events
          # pass through the observers
          observer.instance_variable_set("@params", data.dup)

          result = observer.send(event)

          # Allow an observer to halt event propagation
          if result == :halt
            puts "Observer #{observer} halted event propagation"
            break
          end
        end
      end

      # We've checked all the observers to see if they respond to the
      # named events, so if the event is still unprocessed then let's
      # fall back on the first catch_all event we find
      if !processed
        @@observers.each do |observer|
          if observer.respond_to?(:catch_all)
            observer.instance_variable_set("@params", data.dup)

            observer.send(:catch_all)
            break
          end
        end
      end
    end
  end
end


Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
cloudfuji-0.0.41 lib/cloudfuji/data.rb
cloudfuji-0.0.40 lib/cloudfuji/data.rb
cloudfuji-0.0.39 lib/cloudfuji/data.rb
cloudfuji-0.0.38 lib/cloudfuji/data.rb
cloudfuji-0.0.37 lib/cloudfuji/data.rb