Sha256: b9c147e56e4b39f899604b1d2787a16a8c26599b9d22e4aab0f8f556e210d367

Contents?: true

Size: 1.14 KB

Versions: 7

Compression:

Stored size: 1.14 KB

Contents

module Mongomatic
  module Observable
    def self.included(base)
      base.send(:extend, ClassMethods)
    end
    
    def notify(meth, opts = {})
      self.class.observers.each do |observer|
        @observer_cache ||= {}
        unless observer_klass = @observer_cache[observer]
          @observer_cache[observer] = observer_klass = Object.const_get(observer) if Module.const_defined?(observer)
        end
        
        if observer_klass
          instance = observer_klass.new
          instance.send(meth, self, opts) if instance.respond_to?(meth)
        end
      end
    end
    
    module ClassMethods
      def observers
        @observers ||= []
      end
      
      def add_observer(klass)
        @observers ||= []
        @observers << klass.to_s.to_sym unless @observers.include?(klass.to_s.to_sym)
      end
      alias :observer :add_observer
      
      def has_observer?(klass_or_sym)
        case klass_or_sym
        when Symbol
          @observers.include?(klass)
        else
          @observers.include?(klass.to_s.to_sym)
        end
      end
      
      def remove_observers
        @observers = []
      end
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
mongomatic-0.9.0.pre lib/mongomatic/observable.rb
mongomatic-0.8.2 lib/mongomatic/observable.rb
mongomatic-0.8.1.1 lib/mongomatic/observable.rb
mongomatic-0.7.3 lib/mongomatic/observable.rb
mongomatic-0.7.2 lib/mongomatic/observable.rb
mongomatic-0.7.1 lib/mongomatic/observable.rb
mongomatic-0.7.0 lib/mongomatic/observable.rb