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

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