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!