config-hash
is a Ruby gem that provides a safe, homoiconic, Ruby hash supporting dot notation.
# basic config
config.age = 33
# you can use the dotenv gem to populate ENV values
config.database = {
database: "movies",
adapter: "mysql2",
host: ENV["DB_HOST"],
username: ENV["DB_USER"],
}
# some nesting of values
config.school = {
teachers: {
veterans: %w[ William Peggy Thomas ],
upstarts: ["Connor", "Amber", "Bob" ],
unsure: {
hired: ["Trey"],
processing: ["Mike", "Larry", "Tina"],
}
}
}
# ==[ Add comments, functions, and data right in the config file ]==
# proc to create grouping hash
grouper = proc do |str|
str.split("\n").inject({}) do |obj, row|
row = row.split("#", 2)[0].split(/[,|]/).map(&:strip)
row.each {|col| obj[col] = row[0]} if row.size > 1
obj
end
end
# supply some data to group
config.foods = grouper[<<-end]
meat|chicken,beef,salmon # ,pork
dairy|milk,cheese,ice cream
# junk|candy,monster,burrito
dessert|cake,pie,brownies
end
# the above yields:
# config.foods = {
# "meat" => "meat",
# "chicken" => "meat",
# "beef" => "meat",
# "salmon" => "meat",
# "dairy" => "dairy",
# "milk" => "dairy",
# "cheese" => "dairy",
# "ice cream" => "dairy",
# "dessert" => "dessert",
# "cake" => "dessert",
# "pie" => "dessert",
# "brownies" => "dessert",
# }
# this allows the following:
config.foods.cake # => "dessert"
config.foods.mean # => "meal"
config["foods.milk"] # => "dairy"
config["foods.jerky"] # => nil
This software is licensed under terms of the MIT License.