gem的Base / Home目录

时间:2011-02-21 19:28:26

标签: ruby-on-rails ruby rubygems bundler

作为RSpec的一部分,我需要引用我依赖的gem中包含的文件(称之为gem foo)。我控制gem foo,所以我可以根据需要对它进行更改。

Gem'foo'包含一个我需要在rspec规范中引用的文件。 是否有一个相当稳定的RubyGem或Bundler API来计算'foo'基目录?

假设我的Gemfile中已经需要'foo': Gemfile中的

gem 'foo'

我想做这样的事情(在something_spec.rb中):

filename = File.expand_path('examples/xml/result.xml', Gem.gem_base_path('foo'))

什么是gem_base_path API调用?

2 个答案:

答案 0 :(得分:2)

我建议在gem中创建一个函数来执行此操作:

module Foo
  class Configuration
    def self.result_xml_path
      File.realpath("../examples/xml/result.xml")
    end
  end
end

然后,您可以在规范中执行以下操作:

filename = Foo::Configuration.result_xml_path

由于您从gem获取所有信息,因此更加安全。它看起来也更清洁。

答案 1 :(得分:0)

如果没有蚂蚁需要触摸'foo' gem:

,这可能会做你需要的
matches = Gem::Specification.find_all_by_name 'foo'
spec = matches.first
filename = File.expand_path('examples/xml/result.xml', spec.full_gem_path)

我已经使用这段代码来制作类似于你需要的东西(即在我的规范中加载我的项目使用的gem中定义的一些工厂)