Commit
…nt `notify_observers` `Observable#notify_observers` from Ruby always returns false (which halts ActiveRecord callback chains) and has extra features (like `changed`) that were never used. Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
- Loading branch information
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,3 @@ | ||
require 'observer' | ||
require 'singleton' | ||
require 'active_support/core_ext/array/wrap' | ||
require 'active_support/core_ext/module/aliasing' | ||
|
@@ -8,10 +7,6 @@ module ActiveModel | |
module Observing | ||
extend ActiveSupport::Concern | ||
|
||
included do | ||
extend Observable | ||
end | ||
|
||
module ClassMethods | ||
# Activates the observers assigned. Examples: | ||
# | ||
|
@@ -41,6 +36,22 @@ def instantiate_observers | |
observers.each { |o| instantiate_observer(o) } | ||
end | ||
|
||
def add_observer(observer) | ||
This comment has been minimized.
Sorry, something went wrong.
This comment has been minimized.
Sorry, something went wrong.
mislav
Author
Member
|
||
unless observer.respond_to? :update | ||
raise ArgumentError, "observer needs to respond to `update'" | ||
end | ||
@observer_instances ||= [] | ||
@observer_instances << observer | ||
end | ||
|
||
def notify_observers(*arg) | ||
if defined? @observer_instances | ||
for observer in @observer_instances | ||
observer.update(*arg) | ||
end | ||
end | ||
end | ||
|
||
protected | ||
def instantiate_observer(observer) #:nodoc: | ||
# string/symbol | ||
|
@@ -56,7 +67,6 @@ def instantiate_observer(observer) #:nodoc: | |
# Notify observers when the observed class is subclassed. | ||
def inherited(subclass) | ||
super | ||
changed | ||
notify_observers :observed_class_inherited, subclass | ||
end | ||
end | ||
|
@@ -70,7 +80,6 @@ def inherited(subclass) | |
# notify_observers(:after_save) | ||
# end | ||
def notify_observers(method) | ||
self.class.changed | ||
self.class.notify_observers(method, self) | ||
end | ||
end | ||
|
What about delete_observers? Dynamically removing observers is useful in rake tasks and other contexts in which you don't want every observer firing.