Module: ActiveModel::Observing::ClassMethods

Defined in:
activemodel/lib/active_model/observing.rb

Instance Method Summary collapse

Instance Method Details

#add_observer(observer) ⇒ Object

Add a new observer to the pool. The new observer needs to respond to ‘update’, otherwise it raises an ArgumentError exception.



65
66
67
68
69
70
# File 'activemodel/lib/active_model/observing.rb', line 65

def add_observer(observer)
  unless observer.respond_to? :update
    raise ArgumentError, "observer needs to respond to `update'"
  end
  observer_instances << observer
end

#count_observersObject

Total number of observers.



78
79
80
# File 'activemodel/lib/active_model/observing.rb', line 78

def count_observers
  observer_instances.size
end

#instantiate_observersObject

Instantiate the global observers.



58
59
60
# File 'activemodel/lib/active_model/observing.rb', line 58

def instantiate_observers
  observers.each { |o| instantiate_observer(o) }
end

#notify_observers(*arg) ⇒ Object

Notify list of observers of a change.



73
74
75
# File 'activemodel/lib/active_model/observing.rb', line 73

def notify_observers(*arg)
  observer_instances.each { |observer| observer.update(*arg) }
end

#observer_instancesObject

Gets the current observer instances.



53
54
55
# File 'activemodel/lib/active_model/observing.rb', line 53

def observer_instances
  @observer_instances ||= []
end

#observersObject

Gets an array of observers observing this model. The array also provides enable and disable methods that allow you to selectively enable and disable observers. (see ActiveModel::ObserverArray.enable and ActiveModel::ObserverArray.disable for more on this)



48
49
50
# File 'activemodel/lib/active_model/observing.rb', line 48

def observers
  @observers ||= ObserverArray.new(self)
end

#observers=(*values) ⇒ Object

Active Model Observers Activation

Activates the observers assigned. Examples:

class ORM
  include ActiveModel::Observing
end

# Calls PersonObserver.instance
ORM.observers = :person_observer

# Calls Cacher.instance and GarbageCollector.instance
ORM.observers = :cacher, :garbage_collector

# Same as above, just using explicit class references
ORM.observers = Cacher, GarbageCollector

Note: Setting this does not instantiate the observers yet. instantiate_observers is called during startup, and before each development request.



39
40
41
# File 'activemodel/lib/active_model/observing.rb', line 39

def observers=(*values)
  observers.replace(values.flatten)
end