Sha256: fe0748905dc2add5d855bf51cb0cdc756a89f1ffca3fb84e4077bfd2686e1908

Contents?: true

Size: 1.07 KB

Versions: 90

Compression:

Stored size: 1.07 KB

Contents

require 'observer'
require 'singleton'
require 'set'

module MongoMapper
  module Observing #:nodoc:
    def self.included(model)
      model.class_eval do
        extend Observable
      end      
    end
  end

  class Observer
    include Singleton

    class << self
      def observe(*models)
        models.flatten!
        models.collect! { |model| model.is_a?(Symbol) ? model.to_s.camelize.constantize : model }
        define_method(:observed_classes) { Set.new(models) }
      end

      def observed_class
        if observed_class_name = name[/(.*)Observer/, 1]
          observed_class_name.constantize
        else
          nil
        end
      end
    end

    def initialize
      Set.new(observed_classes).each { |klass| add_observer! klass }
    end

    def update(observed_method, object) #:nodoc:
      send(observed_method, object) if respond_to?(observed_method)
    end

    protected
      def observed_classes
        Set.new([self.class.observed_class].compact.flatten)
      end
      
      def add_observer!(klass)
        klass.add_observer(self)
      end
  end
end

Version data entries

90 entries across 90 versions & 14 rubygems

Version Path
hashrocket-mongomapper-0.3.13 lib/mongomapper/observing.rb
hashrocket-mongomapper-0.3.14 lib/mongomapper/observing.rb
hashrocket-mongomapper-0.3.15 lib/mongomapper/observing.rb
hashrocket-mongomapper-0.3.3 lib/mongomapper/observing.rb
hashrocket-mongomapper-0.3.4.1 lib/mongomapper/observing.rb
hashrocket-mongomapper-0.3.4 lib/mongomapper/observing.rb
hashrocket-mongomapper-0.3.5 lib/mongomapper/observing.rb
hashrocket-mongomapper-0.3.6 lib/mongomapper/observing.rb
hashrocket-mongomapper-0.3.7 lib/mongomapper/observing.rb
hashrocket-mongomapper-0.3.8 lib/mongomapper/observing.rb
jnunemaker-mongomapper-0.3.0 lib/mongomapper/observing.rb
jnunemaker-mongomapper-0.3.1 lib/mongomapper/observing.rb
jnunemaker-mongomapper-0.3.2 lib/mongomapper/observing.rb
jnunemaker-mongomapper-0.3.3 lib/mongomapper/observing.rb
jnunemaker-mongomapper-0.3.4 lib/mongomapper/observing.rb
jnunemaker-mongomapper-0.3.5 lib/mongomapper/observing.rb
nirvdrum-mongomapper-0.3.3 lib/mongomapper/observing.rb
ramsingla-mongomapper-0.2.1 lib/mongomapper/observing.rb
shingara-mongomapper-0.3.3 lib/mongomapper/observing.rb
tpitale-mongo_mapper-0.6.9 lib/mongo_mapper/observing.rb