Will this be OK even if patched and unpatched multiple times?


James Edward Gray II wrote:
> On Dec 10, 2006, at 3:35 PM, S. Robert James wrote:
>
> > 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?
>
> Sure:
>
> #!/usr/bin/env ruby -w
>
> class Existing
>    def needs_patching
>      :old
>    end
> end
> e = Existing.new
> e.needs_patching  # => :old
>
> # save the old and patch
> class Existing
>    alias_method :saved_needs_patching, :needs_patching
>    def needs_patching
>      :new
>    end
> end
> e.needs_patching  # => :new
>
> # restore the old
> class Existing
>    undef :needs_patching
>    alias_method :needs_patching, :saved_needs_patching
> end
> e.needs_patching  # => :old
> 
> __END__
> 
> Hope that helps.
> 
> James Edward Gray II