Method interception in Ruby
How to intercept all the calls to a method.
Consider you have a class like this:
class MyService
def do_something
p "i'm doing something very interesting"
end
end
And you want to execute something before and after the execution of method do_something. How can you do that without touching the current implementation?
Reopen the class, define an alias for dosomething and rewrite dosomething to do the extra stuff.
Like this:
MyService.class_eval do
alias :do_something_new :do_something
def do_something
p "i'm ready to do something"
do_something_new
p "i did something interesting, isn't it?"
end
end
Now if you call do_something you'll have:
service = MyService.new
service.do_something
>> "i'm ready to do something"
>> "i'm doing something very interesting"
>> "i did something interesting, isn't it?"
Written by Emanuele
Related protips
Have a fresh tip? Share with Coderwall community!
Post
Post a tip
Best
#Ruby
Authors
Sponsored by #native_company# — Learn More
#native_title#
#native_desc#