From: "nikolai.weibull@..." Date: 2009-10-02T03:15:22+09:00 Subject: Config.datadir during testing How do I deal with Config.datadir during testing? I don’t want it to point to where the Gem will be, once it has been installed, but to the ”data” directory in my current work directory. I figured that I’d override Config.datadir module Config def self.datadir(package) parts = File.expand_path('.').split(/[#{Regexp.escape (File::SEPARATOR + File::ALT_SEPARATOR)}]/) until parts.empty? break if parts.last == package end return (package) if parts.empty? parts.push 'data', package File.join(*parts) end end but the question is what I should replace with. I first figured I’d do module ConfigWrapper def self.datadir(package) parts = File.expand_path('.').split(/[#{Regexp.escape (File::SEPARATOR + File::ALT_SEPARATOR)}]/) until parts.empty? break if parts.last == package end return super(package) if parts.empty? parts.push 'data', package File.join(*parts) end end Config.extend(ConfigWrapper), but that won’t work, as that won’t put ConfigWrapper in the right place in the call chain (obvious, in retrospect). So I figured I’d do module Config class << self alias old_datadir datadir end def self.datadir(package) parts = File.expand_path('.').split(/[#{Regexp.escape (File::SEPARATOR + File::ALT_SEPARATOR)}]/) until parts.empty? break if parts.last == package end return old_datadir(package) if parts.empty? parts.push 'data', package File.join(*parts) end end but that doesn’t work, as old_datadir will simply point to the current Config.datadir implementation, thus resulting in an infinite loop. I see no way around it. What should I do? (I’d be very pleased if I didn’t have to modify Config.datadir, so if there’s a solution without it that would be nice. I would also like to see a solution to the problem of overriding a module method.) Thanks!