aboutsummaryrefslogtreecommitdiffstats
path: root/activemodel/lib/active_model/observer_array.rb
diff options
context:
space:
mode:
Diffstat (limited to 'activemodel/lib/active_model/observer_array.rb')
-rw-r--r--activemodel/lib/active_model/observer_array.rb30
1 files changed, 8 insertions, 22 deletions
diff --git a/activemodel/lib/active_model/observer_array.rb b/activemodel/lib/active_model/observer_array.rb
index d501215dd6..ab7f86007f 100644
--- a/activemodel/lib/active_model/observer_array.rb
+++ b/activemodel/lib/active_model/observer_array.rb
@@ -4,34 +4,16 @@ module ActiveModel
# Stores the enabled/disabled state of individual observers for
# a particular model classes.
class ObserverArray < Array
- # returns false if:
- # - the ObserverArray for the given model's class has the given observer
- # in its disabled_observers set.
- # - or that is the case at any level of the model's superclass chain.
- def self.observer_enabled?(observer, model)
- klass = model.class
- observer_class = observer.class
-
- loop do
- break unless klass.respond_to?(:observers)
- array = klass.observers
- return false if array.disabled_observers.include?(observer_class)
- klass = klass.superclass
- end
-
- true # observers are enabled by default
- end
-
- def disabled_observers
- @disabled_observers ||= Set.new
- end
-
attr_reader :model_class
def initialize(model_class, *args)
@model_class = model_class
super(*args)
end
+ def disabled_for?(observer)
+ disabled_observers.include?(observer.class)
+ end
+
def disable(*observers, &block)
set_enablement(false, observers, &block)
end
@@ -42,6 +24,10 @@ module ActiveModel
protected
+ def disabled_observers
+ @disabled_observers ||= Set.new
+ end
+
def observer_class_for(observer)
return observer if observer.is_a?(Class)