Gems and Bundler
Lockfile Versions
A lockfile records the exact version chosen after dependency resolution.
lockfile version
Checking a locked version against a requirement explains whether the selected version still fits.
Lockfile Versions
lockfile_versions.rb
Replay: real traced execution (multi-file project)
locked_text = "3.2.4"
locked_version = Gem::Version.new(locked_text)
requirement = Gem::Requirement.new("~> 3.2")
compatible = requirement.satisfied_by?(locked_version)
status = compatible ? "compatible" : "review"
puts "locked=#{locked_version}"
puts "requirement=~> 3.2"
puts "status=#{status}"
locked_text = "3.1.0"
locked_version = Gem::Version.new(locked_text)
requirement = Gem::Requirement.new("~> 3.2")
compatible = requirement.satisfied_by?(locked_version)
status = compatible ? "compatible" : "review"
puts "locked=#{locked_version}"
puts "requirement=~> 3.2"
puts "status=#{status}"
locked_text = "4.0.0"
locked_version = Gem::Version.new(locked_text)
requirement = Gem::Requirement.new("~> 3.2")
compatible = requirement.satisfied_by?(locked_version)
status = compatible ? "compatible" : "review"
puts "locked=#{locked_version}"
puts "requirement=~> 3.2"
puts "status=#{status}"
locked_text ← 3.2.4, locked_version ← 3.2.4, requirement ← ~> 3.2
1locked_text→ 3.2.4 = "3.2.4" #@locked_text="3.1.0", "4.0.0"2locked_version→ 3.2.4 = Gem::Version.new(locked_text3.2.4)3requirement→ ~> 3.2 = Gem::Requirement.new("~> 3.2")45compatible→ true = requirement.satisfied_by?(locked_version)true6status→ compatible = compatibletrue ? "compatible" : "review"78puts "locked=#{locked_version3.2.4}"9puts "requirement=~> 3.2"10puts "status=#{statuscompatible}"outputlocked=3.2.4 requirement=~> 3.2 status=compatible
locked_text ← 3.1.0, locked_version ← 3.1.0, requirement ← ~> 3.2
1locked_text→ 3.1.0 = "3.1.0"2locked_version→ 3.1.0 = Gem::Version.new(locked_text3.1.0)3requirement→ ~> 3.2 = Gem::Requirement.new("~> 3.2")45compatible→ false = requirement.satisfied_by?(locked_version)false6status→ review = compatiblefalse ? "compatible" : "review"78puts "locked=#{locked_version3.1.0}"9puts "requirement=~> 3.2"10puts "status=#{statusreview}"outputlocked=3.1.0 requirement=~> 3.2 status=review
locked_text ← 4.0.0, locked_version ← 4.0.0, requirement ← ~> 3.2
1locked_text→ 4.0.0 = "4.0.0"2locked_version→ 4.0.0 = Gem::Version.new(locked_text4.0.0)3requirement→ ~> 3.2 = Gem::Requirement.new("~> 3.2")45compatible→ false = requirement.satisfied_by?(locked_version)false6status→ review = compatiblefalse ? "compatible" : "review"78puts "locked=#{locked_version4.0.0}"9puts "requirement=~> 3.2"10puts "status=#{statusreview}"outputlocked=4.0.0 requirement=~> 3.2 status=review