Array
Stores the enabled/disabled state of individual observers for a particular model class.
Disables one or more observers. This supports multiple forms:
ORM.observers.disable :user_observer # => disables the UserObserver User.observers.disable AuditTrail # => disables the AuditTrail observer for User notifications. # Other models will still notify the AuditTrail observer. ORM.observers.disable :observer_1, :observer_2 # => disables Observer1 and Observer2 for all models. ORM.observers.disable :all # => disables all observers for all models. User.observers.disable :all do # all user observers are disabled for # just the duration of the block end
# File lib/active_model/observer_array.rb, line 37 37: def disable(*observers, &block) 38: set_enablement(false, observers, &block) 39: end
Returns true if the given observer is disabled for the model class.
# File lib/active_model/observer_array.rb, line 14 14: def disabled_for?(observer) 15: disabled_observers.include?(observer.class) 16: end
Enables one or more observers. This supports multiple forms:
ORM.observers.enable :user_observer # => enables the UserObserver User.observers.enable AuditTrail # => enables the AuditTrail observer for User notifications. # Other models will not be affected (i.e. they will not # trigger notifications to AuditTrail if previously disabled) ORM.observers.enable :observer_1, :observer_2 # => enables Observer1 and Observer2 for all models. ORM.observers.enable :all # => enables all observers for all models. User.observers.enable :all do # all user observers are enabled for # just the duration of the block end
Note: all observers are enabled by default. This method is only useful when you have previously disabled one or more observers.
# File lib/active_model/observer_array.rb, line 64 64: def enable(*observers, &block) 65: set_enablement(true, observers, &block) 66: end
# File lib/active_model/observer_array.rb, line 92 92: def disabled_observer_stack 93: @disabled_observer_stack ||= [] 94: end
# File lib/active_model/observer_array.rb, line 70 70: def disabled_observers 71: @disabled_observers ||= Set.new 72: end
# File lib/active_model/observer_array.rb, line 113 113: def each_subclass_array 114: model_class.descendants.each do |subclass| 115: yield subclass.observers 116: end 117: end
# File lib/active_model/observer_array.rb, line 96 96: def end_transaction 97: @disabled_observers = disabled_observer_stack.pop 98: each_subclass_array do |array| 99: array.end_transaction 100: end 101: end
# File lib/active_model/observer_array.rb, line 74 74: def observer_class_for(observer) 75: return observer if observer.is_a?(Class) 76: 77: if observer.respond_to?(:to_sym) # string/symbol 78: observer.to_s.camelize.constantize 79: else 80: raise ArgumentError, "#{observer} was not a class or a " + 81: "lowercase, underscored class name as expected." 82: end 83: end
# File lib/active_model/observer_array.rb, line 119 119: def set_enablement(enabled, observers) 120: if block_given? 121: transaction do 122: set_enablement(enabled, observers) 123: yield 124: end 125: else 126: observers = ActiveModel::Observer.descendants if observers == [:all] 127: observers.each do |obs| 128: klass = observer_class_for(obs) 129: 130: unless klass < ActiveModel::Observer 131: raise ArgumentError.new("#{obs} does not refer to a valid observer") 132: end 133: 134: if enabled 135: disabled_observers.delete(klass) 136: else 137: disabled_observers << klass 138: end 139: end 140: 141: each_subclass_array do |array| 142: array.set_enablement(enabled, observers) 143: end 144: end 145: end
Disabled; run with --debug to generate this.
Generated with the Darkfish Rdoc Generator 1.1.6.