public
Last active

A demo of YAML anchors, references and nested values

  • Download Gist
stooge_loader.rb
Ruby
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
require 'rubygems'
require 'yaml'
 
# A demonstration of YAML anchors, references and handling of nested values
# For more info, see:
# http://atechie.net/2009/07/merging-hashes-in-yaml-conf-files/
 
stooges = YAML::load( File.read('stooges.yml') )
# => {
# "default" => {
# "URL" => "stooges.com",
# "throw_pies?" => true,
# "stooges" => {
# "larry" => "first_stooge",
# "moe" => "second_stooge",
# "curly" => "third_stooge"
# }
# },
# "development" => {
# "URL" => "stooges.local",
# "throw_pies?" => true,
# "stooges" => { # where are the other 3 stooges?
# "shemp" => "fourth_stooge"
# }
# },
# "test" => {
# "URL" => "test.stooges.qa",
# "throw_pies?" => true,
# "stooges" => {
# "larry" => "first_stooge", # all stooges are here because...
# "moe" => "second_stooge", # ...we used `stooges: <<: *stooge_list` in stooges.yml
# "curly" => "third_stooge",
# "shemp" => "fourth_stooge"
# }
# }
# }
stooges.yml
YAML
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
default: &DEFAULT
URL: stooges.com
throw_pies?: true
stooges: &stooge_list
larry: first_stooge
moe: second_stooge
curly: third_stooge
development:
<<: *DEFAULT
URL: stooges.local
stooges:
shemp: fourth_stooge
test:
<<: *DEFAULT
URL: test.stooges.qa
stooges:
<<: *stooge_list
shemp: fourth_stooge
very_simple_app_conf.rb
Ruby
1 2 3 4 5 6 7 8 9 10 11 12 13
# Set custom config options in config/app_cong.yml
# @examples:
# AppConf.use_ssl? # => false
# AppConf.site_color # => "purple"
class AppConf
SETTINGS_HASH = YAML.load_file( Rails.root.join('config', 'app_conf.yml') )[Rails.env]
class << self
def method_missing(method, *args)
SETTINGS_HASH[method.to_s] # could use ClassyStruct here for more features and better performance
end
end
end

Please sign in to comment on this gist.

Something went wrong with that request. Please try again.