-
-
Save outoftime/773343 to your computer and use it in GitHub Desktop.
module Mongoid | |
module Observing | |
CALLBACKS = [ | |
:before_create, :before_destroy, :before_save, :before_update, | |
:before_validation, :after_create, :after_destroy, :after_save, | |
:after_update, :after_validation | |
] | |
def self.included(base) | |
base.module_eval { include ActiveModel::Observing } | |
CALLBACKS.each do |callback| | |
callback_method = :"notify_observers_#{callback}" | |
base.module_eval <<-RUBY, __FILE__, __LINE__+1 | |
#{callback}(#{callback_method.inspect}) | |
def #{callback_method}(&block) | |
notify_observers(#{callback.inspect}, &block) | |
end | |
private #{callback_method.inspect} | |
RUBY | |
end | |
end | |
end | |
end |
I'm actually just passing them into ActiveRecord::Base.observers=
in an initializer -- not particularly accurate semantically, but it has the intended effect.
Thanks for the info. Its seems there is no way to get rid of ActiveRecord--my app has AR cut out at the moment.
Ohh, good call -- I use the two in conjunction. I'd dig around in the AR internals to see what it does when it instantiates observers -- I'll bet it's something simple that you can replicate in an initializer etc...
A message in the Google Group simply initialized the observers in the observed model. Here is my fork based on it with an initializer. What I am trying to achieve next is adding a new Mongoid Config option.
registering ActiveModel observers with ActiveRecord::Base.observers= doesn't work when cache classes is turned on, whereisciao's solution works great, thx!
Hey Mat, How are you registering your Observers? This by far is the best source I have for setting up mongoid observers.