Skip to content

Instantly share code, notes, and snippets.

@outoftime
Created January 10, 2011 19:56
Show Gist options
  • Save outoftime/773343 to your computer and use it in GitHub Desktop.
Save outoftime/773343 to your computer and use it in GitHub Desktop.
Use ActiveModel observers with your Mongoid 2 models
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
@whereisciao
Copy link

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.

@whatwho
Copy link

whatwho commented May 24, 2012

registering ActiveModel observers with ActiveRecord::Base.observers= doesn't work when cache classes is turned on, whereisciao's solution works great, thx!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment