Method Decorator

Provides a way to dynamically override methods without losing original behavior.

Example

For a given class:

class SomeClass

    def some_method(some_arg)
        puts some_arg
    end

end

MethodDecorator.decorate SomeClass, :some_method do
    puts "decorated_some_method_with: #{call_args}"
    call_original
end

This call:

SomeClass.new.some_method 'some arg'

Produces this output:

decorated_some_method_with: ["some arg"]
some arg

Helper Methods

Inside the block given to ‘MethodDecorator.decorate`, you can call four helper methods:

call_args          # returns original arguments given to the call
call_block         # returns original block given to the call
call_original      # call the original method, with original args and block given to the call
call_original_with # call the original method, with desired args and block

Module inclusion

You can call ‘decorate` method directly instead of calling `MethodDecorator.decorate`. Just include `MethodDecorator` module:

class SomeClass

    def some_method(some_arg)
        puts some_arg
    end

    include MethodDecorator

    decorate :some_method do
        puts "decorated_some_method_with: #{call_args}"
        call_original
    end

end

Singleton Classes Support

It works too:

class SomeClass

    class << self

        def some_method(some_arg)
            puts some_arg
        end

    end

end

MethodDecorator.decorate SomeClass.singleton_class, :some_method do
    puts "decorated_some_method_with: #{call_args}"
    call_original
end

SomeClass.some_method 'some arg'

More

To see more of ‘MethodDecorator` usages, please take a look at DummyClass.

<img src=“https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif” alt=“Donate” />