Ann: ArEvents

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

Just added the possibility to ignore events permanently:

        ArEventComment.ignore_ar_events(:before_create)         #some code         ArEventComment.ignore_ar_events(:before_create)

or with a block of code:

        ArEventComment.ignore_ar_events(:before_create) do                 #some code         end

The code is on github: http://github.com/raphinou/ArEvents

Raph