non-sucky :before and :after callbacks for any ruby class
Fetching latest commit…
Cannot retrieve the latest commit at this time
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.