Hi --
I need to temporarily mokey patch out a method in a certain class used
by a lib in one of my tests. That's easy.
However, what I don't know how to do is to restore back the orginial
(without copying in the src, of course), when I'm done. Is there any
good way to do this - that is, monkey patch temporarily, and then put
things back the way they were?
I reply under mild protest, as I detest the term "monkey patching"
(and never know what people mean by it, since they mean different
things). Anyway...
One way to change a method temporarily,
albeit a non-thread-safe way, is with aliases -- something like:
alias newname oldname
def oldname
...
end
alias oldname newname
That was the basis of Ruby Behaviors, a package I wrote in 2001 to do
exactly this: temporary changes to core behaviors. Matz described the
alias approach at RubyConf 2001 as a "naive" way to go about it
It did however spark an interesting discussion about selector
namespaces, a discussion we're basically still having.
There are, or were, also some other libraries on RAA that address
this. I'm afraid I don't remember their names and am being too lazy
to look them up, but if you hunt for library stuff pertaining to
classes and methods you'll most likely find them.
David
--
David A. Black | (e-mail address removed)
Author of "Ruby for Rails" [1] | Ruby/Rails training & consultancy [3]
DABlog (DAB's Weblog) [2] | Co-director, Ruby Central, Inc. [4]
[1]
http://www.manning.com/black | [3]
http://www.rubypowerandlight.com
[2]
http://dablog.rubypal.com | [4]
http://www.rubycentral.org