Stores the enabled/disabled state of individual observers for a particular model class.

Methods
D
E
N
O
S
T
Attributes
[R] model_class
Class Public methods
new(model_class, *args)
    # File activemodel/lib/active_model/observer_array.rb, line 8
 8:     def initialize(model_class, *args)
 9:       @model_class = model_class
10:       super(*args)
11:     end
Instance Public methods
disable(*observers, &block)

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 activemodel/lib/active_model/observer_array.rb, line 37
37:     def disable(*observers, &block)
38:       set_enablement(false, observers, &block)
39:     end
disabled_for?(observer)

Returns true if the given observer is disabled for the model class.

    # File activemodel/lib/active_model/observer_array.rb, line 14
14:     def disabled_for?(observer)
15:       disabled_observers.include?(observer.class)
16:     end
enable(*observers, &block)

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 activemodel/lib/active_model/observer_array.rb, line 64
64:     def enable(*observers, &block)
65:       set_enablement(true, observers, &block)
66:     end
Instance Protected methods
disabled_observer_stack()
    # File activemodel/lib/active_model/observer_array.rb, line 92
92:       def disabled_observer_stack
93:         @disabled_observer_stack ||= []
94:       end
disabled_observers()
    # File activemodel/lib/active_model/observer_array.rb, line 70
70:       def disabled_observers
71:         @disabled_observers ||= Set.new
72:       end
each_subclass_array()
     # File activemodel/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
end_transaction()
     # File activemodel/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
observer_class_for(observer)
    # File activemodel/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
set_enablement(enabled, observers)
     # File activemodel/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
start_transaction()
    # File activemodel/lib/active_model/observer_array.rb, line 85
85:       def start_transaction
86:         disabled_observer_stack.push(disabled_observers.dup)
87:         each_subclass_array do |array|
88:           array.start_transaction
89:         end
90:       end
transaction()
     # File activemodel/lib/active_model/observer_array.rb, line 103
103:       def transaction
104:         start_transaction
105: 
106:         begin
107:           yield
108:         ensure
109:           end_transaction
110:         end
111:       end