Gems and Bundler
Gemfile Lines
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
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}"
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
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
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