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!

On Oct 1, 8:12 pm, I wrote:

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.

OK, since no one has responded, can I perhaps limit the question to
how to deal with things like Config.datadir during testing for the
package that I’m testing? Before installation I want it to be local
to the package. Once installed I want it to use the path where the
files were installed.

On Oct 1, 8:12 pm, “[email protected]
[email protected] wrote:

until parts.empty?

end
end

OK, I’m a fucking moron. That should be

while last = parts.pop
break if last == package
end

Still, it would be nice to see alternative solutions to this.