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
mongo_mapper-unstable-2009.12.30 lib/mongo_mapper/observing.rb
mongo_mapper-unstable-2009.12.29 lib/mongo_mapper/observing.rb
mongo_mapper-unstable-2009.12.23 lib/mongo_mapper/observing.rb
mongo_mapper-unstable-2009.12.22 lib/mongo_mapper/observing.rb
mongo_mapper-unstable-2009.12.16 lib/mongo_mapper/observing.rb
mongo_mapper-0.6.8 lib/mongo_mapper/observing.rb
mongo_mapper-unstable-2009.12.14 lib/mongo_mapper/observing.rb
mongo_mapper-0.6.7 lib/mongo_mapper/observing.rb
mongo_mapper-0.6.6 lib/mongo_mapper/observing.rb
mongo_mapper-unstable-2009.12.4 lib/mongo_mapper/observing.rb
danielharan-mongo_mapper-0.6.5 lib/mongo_mapper/observing.rb
mongo_mapper-0.6.5 lib/mongo_mapper/observing.rb
webbynode-mongo_mapper-0.6.4 lib/mongo_mapper/observing.rb
mongo_mapper-0.6.4 lib/mongo_mapper/observing.rb
mongo_mapper-0.6.3 lib/mongo_mapper/observing.rb
mongo_mapper-0.6.2 lib/mongo_mapper/observing.rb
mongo_mapper-0.6.1 lib/mongo_mapper/observing.rb
mongo_mapper-unstable-2009.11.18 lib/mongo_mapper/observing.rb
mongo_mapper-0.6.0 lib/mongo_mapper/observing.rb
mongo_mapper-unstable-2009.11.8 lib/mongo_mapper/observing.rb