Gems and Bundler
Version Requirements
RubyGems requirements describe which gem versions are acceptable.
version requirement
`Gem::Requirement` checks whether a specific version satisfies a requirement expression.
Version Requirements
version_requirements.rb
Replay: real traced execution (multi-file project)
requirement_text = "~> 3.2"
requirement = Gem::Requirement.new(requirement_text)
version = Gem::Version.new("3.2.4")
satisfied = requirement.satisfied_by?(version)
status = satisfied ? "allowed" : "blocked"
puts "requirement=#{requirement_text}"
puts "version=#{version}"
puts "status=#{status}"
requirement_text = ">= 3.0"
requirement = Gem::Requirement.new(requirement_text)
version = Gem::Version.new("3.2.4")
satisfied = requirement.satisfied_by?(version)
status = satisfied ? "allowed" : "blocked"
puts "requirement=#{requirement_text}"
puts "version=#{version}"
puts "status=#{status}"
requirement_text = "< 3.0"
requirement = Gem::Requirement.new(requirement_text)
version = Gem::Version.new("3.2.4")
satisfied = requirement.satisfied_by?(version)
status = satisfied ? "allowed" : "blocked"
puts "requirement=#{requirement_text}"
puts "version=#{version}"
puts "status=#{status}"
requirement_text ← ~> 3.2, requirement ← ~> 3.2, version ← 3.2.4
1requirement_text→ ~> 3.2 = "~> 3.2" #@requirement_text=">= 3.0", "< 3.0"2requirement→ ~> 3.2 = Gem::Requirement.new(requirement_text~> 3.2)3version→ 3.2.4 = Gem::Version.new("3.2.4")45satisfied→ true = requirement.satisfied_by?(version)true6status→ allowed = satisfiedtrue ? "allowed" : "blocked"78puts "requirement=#{requirement_text~> 3.2}"9puts "version=#{version3.2.4}"10puts "status=#{statusallowed}"outputrequirement=~> 3.2 version=3.2.4 status=allowed
requirement_text ← >= 3.0, requirement ← >= 3.0, version ← 3.2.4
1requirement_text→ >= 3.0 = ">= 3.0"2requirement→ >= 3.0 = Gem::Requirement.new(requirement_text>= 3.0)3version→ 3.2.4 = Gem::Version.new("3.2.4")45satisfied→ true = requirement.satisfied_by?(version)true6status→ allowed = satisfiedtrue ? "allowed" : "blocked"78puts "requirement=#{requirement_text>= 3.0}"9puts "version=#{version3.2.4}"10puts "status=#{statusallowed}"outputrequirement=>= 3.0 version=3.2.4 status=allowed
requirement_text ← < 3.0, requirement ← < 3.0, version ← 3.2.4
1requirement_text→ < 3.0 = "< 3.0"2requirement→ < 3.0 = Gem::Requirement.new(requirement_text< 3.0)3version→ 3.2.4 = Gem::Version.new("3.2.4")45satisfied→ false = requirement.satisfied_by?(version)false6status→ blocked = satisfiedfalse ? "allowed" : "blocked"78puts "requirement=#{requirement_text< 3.0}"9puts "version=#{version3.2.4}"10puts "status=#{statusblocked}"outputrequirement=< 3.0 version=3.2.4 status=blocked