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 |*args|
    puts :decorated_some_method
    MethodDecorator.call_original_method self, :some_method, *args
end

This call:

SomeClass.new.some_method 'some arg'

Produces this output:

decorated_some_method
some arg

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 |*args|
    puts :decorated_some_method
    MethodDecorator.call_original_method self, :some_method, *args
end

SomeClass.some_method 'some arg'

<img src=“” alt=“Donate” />