From: "Mauricio Fernández" Date: 2005-08-12T19:26:11+09:00 Subject: Re: Dear RubyGems: Perhaps a better way to override require... On Fri, Aug 12, 2005 at 06:14:21AM +0900, Ryan Leavengood wrote: > Also it seems to be the alias method is fine, as long as everyone uses a > unique name for the old method: [...] > module Kernel > alias :_some_old_require_ :require > def require(s) > puts 'New require, now calling _some_old_require_...' > _some_old_require_(s) > end > end > > require 'English' > puts $PID > __END__ > > C:\_Ryan\ruby>ruby require_test.rb > New require, now calling _some_old_require_... > New require, now calling _old_require_... > 3408 > > If unique names aren't used, the result is an infinite loop. I often prefer something like: batsman@tux-chan:/tmp$ cat gfdhoidhi.rb module Kernel meth = instance_method(:require) define_method(:require) do |s| puts "New require(1), reusing old definition" meth.bind(self).call(s) end end module Kernel meth = instance_method(:require) define_method(:require) do |s| puts "New require(2), reusing old definition" meth.bind(self).call(s) end end require 'English' puts $PID batsman@tux-chan:/tmp$ ruby gfdhoidhi.rb New require(2), reusing old definition New require(1), reusing old definition 4582 especially in 1.9, of course. -- Mauricio Fernandez