База / Домашний каталог драгоценного камня - PullRequest
3 голосов
/ 21 февраля 2011

Как часть RSpec, мне нужно сослаться на файл, содержащийся в геме, от которого я зависел (назовите его гемом foo). Я контролирую gem foo, поэтому могу вносить в него изменения по мере необходимости.

Gem 'foo' содержит файл, на который мне нужно сослаться в спецификации rspec. Существует ли достаточно стабильный RubyGem или Bundler API для определения базового каталога 'foo'?

Предполагается, что 'foo' уже требуется в моем Gemfile: в Gemfile:

gem 'foo'

Я хочу сделать что-то вроде этого (в some_spec.rb):

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

Что такое вызов API gem_base_path?

Ответы [ 2 ]

2 голосов
/ 21 февраля 2011

Я бы порекомендовал создать функцию в вашем геме, чтобы сделать это:

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

Затем вы можете сделать следующее в вашей спецификации:

filename = Foo::Configuration.result_xml_path

Это намного безопаснее, так как вы получаете всю информацию от драгоценного камня. Это также выглядит чище.

0 голосов
/ 26 октября 2011

Это может сделать то, что вам нужно, без необходимости прикасаться к самоцвету 'foo':

matches = Gem::Specification.find_all_by_name 'foo'
spec = matches.first
filename = File.expand_path('examples/xml/result.xml', spec.full_gem_path)

Я использовал этот код, чтобы сделать что-то похожее на то, что вам нужно (а именно, загрузить в мои спецификации некоторые фабрики, определенные в геме, используемом моим проектом)

...