Gems and Bundler
Dependency Groups
Gemfiles can organize dependencies by purpose, such as development, test, or production.
dependency group
A dependency group is just a label that helps decide when a dependency is needed.
Dependency Groups
dependency_groups.rb
Replay: real traced execution (multi-file project)
group_name = "development"
dependencies = [
{ name: "debug", group: "development" },
{ name: "minitest", group: "test" },
{ name: "puma", group: "production" }
]
matches = dependencies.select { |dependency| dependency[:group] == group_name }
names = matches.map { |dependency| dependency[:name] }
names_text = names.join("/")
puts "group=#{group_name}"
puts "count=#{names.length}"
puts "gems=#{names_text}"
group_name = "test"
dependencies = [
{ name: "debug", group: "development" },
{ name: "minitest", group: "test" },
{ name: "puma", group: "production" }
]
matches = dependencies.select { |dependency| dependency[:group] == group_name }
names = matches.map { |dependency| dependency[:name] }
names_text = names.join("/")
puts "group=#{group_name}"
puts "count=#{names.length}"
puts "gems=#{names_text}"
group_name = "production"
dependencies = [
{ name: "debug", group: "development" },
{ name: "minitest", group: "test" },
{ name: "puma", group: "production" }
]
matches = dependencies.select { |dependency| dependency[:group] == group_name }
names = matches.map { |dependency| dependency[:name] }
names_text = names.join("/")
puts "group=#{group_name}"
puts "count=#{names.length}"
puts "gems=#{names_text}"
group_name ← development, dependencies ← [{:name=>"debug", :group=>"development"}, {:name=>"minitest", :group=>"test"}, {:name=>"puma", :group=>"production"}]
1group_name→ development = "development" #@group_name="test", "production"2dependencies→ [{:name=>"debug", :group=>"development"}, {:name=>"minitest", :group=>"test"}, {:name=>"puma", :group=>"production"}] = [3 { name: "debug", group: "development" },4 { name: "minitest", group: "test" },5 { name: "puma", group: "production" }6]78matches→ [{:name=>"debug", :group=>"development"}] = dependencies[{:name=>"debug", :group=>"development"}, {:name=>"minitest", :group=>"test"}, {:name=>"puma", :group=>"production"}].select { |dependency| dependency[:group] == group_name }9names→ ["debug"] = matches[{:name=>"debug", :group=>"development"}].map { |dependency| dependency[:name] }10names_text→ debug = names.join("/")debug1112puts "group=#{group_namedevelopment}"13puts "count=#{names.length1}"14puts "gems=#{names_textdebug}"outputgroup=development count=1 gems=debug
group_name ← test, dependencies ← [{:name=>"debug", :group=>"development"}, {:name=>"minitest", :group=>"test"}, {:name=>"puma", :group=>"production"}]
1group_name→ test = "test"2dependencies→ [{:name=>"debug", :group=>"development"}, {:name=>"minitest", :group=>"test"}, {:name=>"puma", :group=>"production"}] = [3 { name: "debug", group: "development" },4 { name: "minitest", group: "test" },5 { name: "puma", group: "production" }6]78matches→ [{:name=>"minitest", :group=>"test"}] = dependencies[{:name=>"debug", :group=>"development"}, {:name=>"minitest", :group=>"test"}, {:name=>"puma", :group=>"production"}].select { |dependency| dependency[:group] == group_name }9names→ ["minitest"] = matches[{:name=>"minitest", :group=>"test"}].map { |dependency| dependency[:name] }10names_text→ minitest = names.join("/")minitest1112puts "group=#{group_nametest}"13puts "count=#{names.length1}"14puts "gems=#{names_textminitest}"outputgroup=test count=1 gems=minitest
group_name ← production, dependencies ← [{:name=>"debug", :group=>"development"}, {:name=>"minitest", :group=>"test"}, {:name=>"puma", :group=>"production"}]
1group_name→ production = "production"2dependencies→ [{:name=>"debug", :group=>"development"}, {:name=>"minitest", :group=>"test"}, {:name=>"puma", :group=>"production"}] = [3 { name: "debug", group: "development" },4 { name: "minitest", group: "test" },5 { name: "puma", group: "production" }6]78matches→ [{:name=>"puma", :group=>"production"}] = dependencies[{:name=>"debug", :group=>"development"}, {:name=>"minitest", :group=>"test"}, {:name=>"puma", :group=>"production"}].select { |dependency| dependency[:group] == group_name }9names→ ["puma"] = matches[{:name=>"puma", :group=>"production"}].map { |dependency| dependency[:name] }10names_text→ puma = names.join("/")puma1112puts "group=#{group_nameproduction}"13puts "count=#{names.length1}"14puts "gems=#{names_textpuma}"outputgroup=production count=1 gems=puma