基本上,我正在尝试构建一个 gem,当某些依赖项过时时,它会执行某种形式的测试失败。在测试框架中,我可以轻松地从 Gem 中删除废话,以便 Gem.loaded_specs("foo") 返回 gem foo 的规范。我正在寻找的是一种提供夹具 Gemfile 然后解析锁定文件的方法。
当我使用 Gem.loaded_specs 时,它以某种方式神奇地知道要使用哪个 Gemfile,我如何为它提供不同的 gemfile(即:我的夹具)?
我知道有人提到“使用捆绑器”,这是有道理的,但在我的 gem 代码中,我这样做了:
gem_here = Gem.loaded_specs[gem_name]
gem_here.nil? ? :not_in_bundle : gem_here.version.to_s
Run Code Online (Sandbox Code Playgroud)
我需要使用我的夹具 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
Run Code Online (Sandbox Code Playgroud)