基本上,我正在尝试构建一个gem,当某些依赖项过时时,它会执行某种形式的测试失败。在测试框架中,我可以轻松地从Gem中删除废话,以便Gem.loaded_specs(“foo”)返回gem foo的规范。我正在寻找的是一种提供夹具Gemfile然后解析锁文件的方法。
当我使用Gem.loaded_specs时,它神奇地知道要使用哪个Gemfile,如何为它提供不同的gemfile(即:我的灯具)?
我知道有人提到“使用捆绑器”并且这是有道理的但是在我的代码中我做了这个:
gem_here = Gem.loaded_specs[gem_name]
gem_here.nil? ? :not_in_bundle : gem_here.version.to_s
我需要使用我的fixture Gemfile而不是当前的项目gemfile。
这有什么意义吗?对不起,如果这是模糊的。
注意:我不是试图通过CLI执行此操作。如果可以的话,我想使用编程(即:ruby api)方法。
编辑:
我现在正在使用这种来源:
gem_here = Bundler.load.specs.detect do |specs|
specs.name == gem_name
end
gem_here.nil? ? :not_in_bundle : gem_here.version.to_s
答案 0 :(得分:4)
解析自己是不可取的,因为Bundler做了繁重的工作(解析,依赖解析)。
Bundler::LockfileParser.new(Bundler.read_file(Bundler.default_lockfile))
然后,使用gemspecs和lockfile访问所有运行时和/或开发依赖项。特定gem的运行时/开发代表可以通过(当前未记录的,需要的贡献)RubyGems JSON API https://api.rubygems.org/api/v2/rubygems/rails/versions/5.0.0.1.json
获得。 注意: Bundler 2.0 Gemfile.lock
- > gems.locked