diff options
author | Rick Olson <technoweenie@gmail.com> | 2006-08-06 02:08:29 +0000 |
---|---|---|
committer | Rick Olson <technoweenie@gmail.com> | 2006-08-06 02:08:29 +0000 |
commit | e8f0b1ddd97cfcefc32554a1a9447ec092c4d0ae (patch) | |
tree | 92281682ae046ac7b635cd087be606eb3e29ca97 /activerecord/lib | |
parent | a7f1586404b74055fc22d8eeb3473639aa956af7 (diff) | |
download | rails-e8f0b1ddd97cfcefc32554a1a9447ec092c4d0ae.tar.gz rails-e8f0b1ddd97cfcefc32554a1a9447ec092c4d0ae.tar.bz2 rails-e8f0b1ddd97cfcefc32554a1a9447ec092c4d0ae.zip |
Refactor ActiveRecord::Base.reset_subclasses to #reset, and add global observer resetting. [Rick Olson]
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@4683 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
Diffstat (limited to 'activerecord/lib')
-rwxr-xr-x | activerecord/lib/active_record/base.rb | 4 | ||||
-rw-r--r-- | activerecord/lib/active_record/observer.rb | 18 |
2 files changed, 20 insertions, 2 deletions
diff --git a/activerecord/lib/active_record/base.rb b/activerecord/lib/active_record/base.rb index 1d9f0175bd..5e9d18e5d4 100755 --- a/activerecord/lib/active_record/base.rb +++ b/activerecord/lib/active_record/base.rb @@ -272,6 +272,10 @@ module ActiveRecord #:nodoc: super end + def self.reset + reset_subclasses + end + def self.reset_subclasses #:nodoc: nonreloadables = [] subclasses.each do |klass| diff --git a/activerecord/lib/active_record/observer.rb b/activerecord/lib/active_record/observer.rb index a2030b84b3..262f12d91e 100644 --- a/activerecord/lib/active_record/observer.rb +++ b/activerecord/lib/active_record/observer.rb @@ -4,10 +4,18 @@ require 'set' module ActiveRecord module Observing # :nodoc: def self.included(base) - base.extend(ClassMethods) + class << base + include ClassMethods + alias_method_chain :reset, :observers + end end module ClassMethods + def reset_with_observers # :nodoc: + reset_without_observers + instantiate_observers + end + # Activates the observers assigned. Examples: # # # Calls PersonObserver.instance @@ -19,7 +27,13 @@ module ActiveRecord # # Same as above, just using explicit class references # ActiveRecord::Base.observers = Cacher, GarbageCollector def observers=(*observers) - observers.flatten.each do |observer| + @observers = observers.flatten + end + + # Instantiate the global ActiveRecord observers + def instantiate_observers + return if @observers.blank? + @observers.each do |observer| if observer.respond_to?(:to_sym) # Symbol or String observer.to_s.camelize.constantize.instance elsif observer.respond_to?(:instance) |