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
crnixon-mongomapper-0.2.0 lib/mongomapper/observing.rb
crnixon-mongomapper-0.3.4 lib/mongomapper/observing.rb
djsun-mongomapper-0.3.1.1 lib/mongomapper/observing.rb
djsun-mongomapper-0.3.1 lib/mongomapper/observing.rb
djsun-mongomapper-0.3.3 lib/mongomapper/observing.rb
djsun-mongomapper-0.3.5.1 lib/mongomapper/observing.rb
djsun-mongomapper-0.3.5.2 lib/mongomapper/observing.rb
djsun-mongomapper-0.3.5.4 lib/mongomapper/observing.rb
djsun-mongomapper-0.3.5.5 lib/mongomapper/observing.rb
djsun-mongomapper-0.3.5 lib/mongomapper/observing.rb
fcoury-mongomapper-0.2.0 lib/mongomapper/observing.rb
fcoury-mongomapper-0.3.0 lib/mongomapper/observing.rb
fcoury-mongomapper-0.3.1 lib/mongomapper/observing.rb
fcoury-mongomapper-0.3.3 lib/mongomapper/observing.rb
fcoury-mongomapper-0.3.4 lib/mongomapper/observing.rb
fcoury-mongomapper-0.3.5 lib/mongomapper/observing.rb
fcoury-mongomapper-0.4.0 lib/mongomapper/observing.rb
hashrocket-mongomapper-0.3.10 lib/mongomapper/observing.rb
hashrocket-mongomapper-0.3.11 lib/mongomapper/observing.rb
hashrocket-mongomapper-0.3.12 lib/mongomapper/observing.rb