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