使用 Bundler 解析 Gemfile.lock
Parsing a Gemfile.lock with Bundler
基本上,我正在尝试构建一个 gem,当某些依赖项已过时时,它会执行某种形式的测试失败。在测试框架中,我可以轻松地从 Gem 中删除废话,以便 Gem.loaded_specs("foo") returns gem foo 的规范。我正在寻找的是一种提供夹具 Gem 文件然后解析锁定文件的方法。
当我使用 Gem.loaded_specs 时,它不知何故神奇地知道要使用哪个 Gem 文件,我如何为它提供不同的 gem 文件(即:我的夹具)?
我知道有人提到 "use bundler",这是有道理的,但在我的 gem 代码中,我这样做:
gem_here = Gem.loaded_specs[gem_name]
gem_here.nil? ? :not_in_bundle : gem_here.version.to_s
我需要使用我的夹具 Gem 文件而不是当前项目 gem 文件来完成这项工作。
这有意义吗?抱歉,如果这含糊不清。
注意:我并没有尝试通过 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
你自己解析是不可取的,因为 Bundler 会做繁重的工作(解析、依赖解析)。
Bundler::LockfileParser.new(Bundler.read_file(Bundler.default_lockfile))
然后,使用 gemspecs 和锁文件访问所有运行时 and/or 开发依赖项。 Runtime/development 可通过(当前未记录,需要贡献)RubyGems JSON API https://api.rubygems.org/api/v2/rubygems/rails/versions/5.0.0.1.json
获得特定 gems 的 dep
注意: 捆绑器 2.0 Gemfile.lock
-> gems.locked
基本上,我正在尝试构建一个 gem,当某些依赖项已过时时,它会执行某种形式的测试失败。在测试框架中,我可以轻松地从 Gem 中删除废话,以便 Gem.loaded_specs("foo") returns gem foo 的规范。我正在寻找的是一种提供夹具 Gem 文件然后解析锁定文件的方法。
当我使用 Gem.loaded_specs 时,它不知何故神奇地知道要使用哪个 Gem 文件,我如何为它提供不同的 gem 文件(即:我的夹具)?
我知道有人提到 "use bundler",这是有道理的,但在我的 gem 代码中,我这样做:
gem_here = Gem.loaded_specs[gem_name]
gem_here.nil? ? :not_in_bundle : gem_here.version.to_s
我需要使用我的夹具 Gem 文件而不是当前项目 gem 文件来完成这项工作。
这有意义吗?抱歉,如果这含糊不清。
注意:我并没有尝试通过 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
你自己解析是不可取的,因为 Bundler 会做繁重的工作(解析、依赖解析)。
Bundler::LockfileParser.new(Bundler.read_file(Bundler.default_lockfile))
然后,使用 gemspecs 和锁文件访问所有运行时 and/or 开发依赖项。 Runtime/development 可通过(当前未记录,需要贡献)RubyGems JSON API https://api.rubygems.org/api/v2/rubygems/rails/versions/5.0.0.1.json
获得特定 gems 的 dep注意: 捆绑器 2.0 Gemfile.lock
-> gems.locked