A Gemfile line names a dependency and may include a version requirement.

gemfile line A Gemfile is Ruby code, but its dependency lines usually follow a simple readable pattern.

Gemfile Lines

gem_name
gemfile_lines.rb
Replay: real traced execution (multi-file project)
gem_name = "rack"
requirements = {
  "rack" => "~> 3.0",
  "json" => ">= 2.6",
  "minitest" => "~> 5.0"
}

requirement = requirements[gem_name]
line = "gem \"#{gem_name}\", \"#{requirement}\""
has_requirement = !requirement.nil?

puts "gem=#{gem_name}"
puts "requirement=#{requirement}"
puts "line=#{line}"
puts "has_requirement=#{has_requirement}"
gem_name = "json"
requirements = {
  "rack" => "~> 3.0",
  "json" => ">= 2.6",
  "minitest" => "~> 5.0"
}

requirement = requirements[gem_name]
line = "gem \"#{gem_name}\", \"#{requirement}\""
has_requirement = !requirement.nil?

puts "gem=#{gem_name}"
puts "requirement=#{requirement}"
puts "line=#{line}"
puts "has_requirement=#{has_requirement}"
gem_name = "minitest"
requirements = {
  "rack" => "~> 3.0",
  "json" => ">= 2.6",
  "minitest" => "~> 5.0"
}

requirement = requirements[gem_name]
line = "gem \"#{gem_name}\", \"#{requirement}\""
has_requirement = !requirement.nil?

puts "gem=#{gem_name}"
puts "requirement=#{requirement}"
puts "line=#{line}"
puts "has_requirement=#{has_requirement}"
  1. gem_name ← rack, requirements ← {"rack"=>"~> 3.0", "json"=>">= 2.6", "minitest"=>"~> 5.0"}

    1gem_name→ rack = "rack"  #@gem_name="json", "minitest"2requirements→ {"rack"=>"~> 3.0", "json"=>">= 2.6", "minitest"=>"~> 5.0"} = {3  "rack" => "~> 3.0",4  "json" => ">= 2.6",5  "minitest" => "~> 5.0"6}78requirement→ ~> 3.0 = requirements[gem_name]~> 3.09line→ gem "rack", "~> 3.0" = "gem \"#{gem_namerack}\", \"#{requirement~> 3.0}\""10has_requirement→ true = !requirement.nil?false1112puts "gem=#{gem_namerack}"13puts "requirement=#{requirement~> 3.0}"14puts "line=#{linegem "rack", "~> 3.0"}"15puts "has_requirement=#{has_requirementtrue}"
    outputgem=rack
    requirement=~> 3.0
    line=gem "rack", "~> 3.0"
    has_requirement=true
  1. gem_name ← json, requirements ← {"rack"=>"~> 3.0", "json"=>">= 2.6", "minitest"=>"~> 5.0"}

    1gem_name→ json = "json"2requirements→ {"rack"=>"~> 3.0", "json"=>">= 2.6", "minitest"=>"~> 5.0"} = {3  "rack" => "~> 3.0",4  "json" => ">= 2.6",5  "minitest" => "~> 5.0"6}78requirement→ >= 2.6 = requirements[gem_name]>= 2.69line→ gem "json", ">= 2.6" = "gem \"#{gem_namejson}\", \"#{requirement>= 2.6}\""10has_requirement→ true = !requirement.nil?false1112puts "gem=#{gem_namejson}"13puts "requirement=#{requirement>= 2.6}"14puts "line=#{linegem "json", ">= 2.6"}"15puts "has_requirement=#{has_requirementtrue}"
    outputgem=json
    requirement=>= 2.6
    line=gem "json", ">= 2.6"
    has_requirement=true
  1. gem_name ← minitest, requirements ← {"rack"=>"~> 3.0", "json"=>">= 2.6", "minitest"=>"~> 5.0"}

    1gem_name→ minitest = "minitest"2requirements→ {"rack"=>"~> 3.0", "json"=>">= 2.6", "minitest"=>"~> 5.0"} = {3  "rack" => "~> 3.0",4  "json" => ">= 2.6",5  "minitest" => "~> 5.0"6}78requirement→ ~> 5.0 = requirements[gem_name]~> 5.09line→ gem "minitest", "~> 5.0" = "gem \"#{gem_nameminitest}\", \"#{requirement~> 5.0}\""10has_requirement→ true = !requirement.nil?false1112puts "gem=#{gem_nameminitest}"13puts "requirement=#{requirement~> 5.0}"14puts "line=#{linegem "minitest", "~> 5.0"}"15puts "has_requirement=#{has_requirementtrue}"
    outputgem=minitest
    requirement=~> 5.0
    line=gem "minitest", "~> 5.0"
    has_requirement=true