RubyGems requirements describe which gem versions are acceptable.

version requirement `Gem::Requirement` checks whether a specific version satisfies a requirement expression.

Version Requirements

requirement_text
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}"
  1. 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
  1. 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
  1. 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