Join GitHub today
GitHub is home to over 28 million developers working together to host and review code, manage projects, and build software together.Sign up
Fetching latest commit…
Cannot retrieve the latest commit at this time.
|Failed to load latest commit information.|
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.