NAME

wrap

SYNOPSIS

non-sucking :before and :after filters for any ruby class

DESCRIPTION

yes yes, active_support does this.  but crapily.  with active_support you'll
need to do this

  class Record
    include ActiveSupport::Callbacks
    define_callbacks :save

    def save
      run_callbacks :save do
        puts "- save"
      end
    end
  end

but hey, if a subclass forgets to call 'super' or doesn't manually run
'run_callbacks' the codez are *screwed*.  that sux.  why not this?

  class Record
    include Wrap

    wrap :save
  end

yes, it's that simple.  you can now do

  class SubRecord < Record
    before :save do
      special_sauce
    end

    def save
      no_special_sauce
    end
  end

did you get that?  the :before and :after hooks will be called no matter
what the subclass does.  the method will be wrapped, period.  no special
work required.  of course, if the sublcass messes with 'method_added' their
will be hell to pay.  that's the price for simplicity.

the callbacks are very close, but not identical to active_supports.  you can
return 'false' to halt the chain, but you can also simply call 'halt!'.
another neat trick is that :before callbacks will be called with the
arguments to the wrapped method itself iff possible and :after callbacks
will be called with the result of the wrapped method, iff possible.

the test suite reads pretty damn clean.  have a go.