Hi,
I needed to be able to add actions to be taken during the lifecycle of ActiveRecord object, but needed to configure it dynamically. Observers were not flexible enough and I ended up developing ArEvents, which lets you easily attach and detach event listeners, the events correspond to the active record callbacks.
If you have an existing model, just include the ArEvents module:
ArEventComment.send(:include, ArEvents)
and you can then add event listeners:
ArEventComment.add_ar_event_listener(:before_validation, ArEventCommentListener)
An event listener is simply a class with a class method named trigger that takes 2 arguments: the event fired and the object fireing the event:
class ArEventCommentListener def self.trigger(evt, obj) puts "event #{evt} triggered by object #{obj.inspect}" end end
I'm not yet using it in production, but tests pass as expected.
You can find the code at http://github.com/raphinou/ArEvents
All comments and suggestions are of course welcome!
Raphaël