Created

Embed URL

HTTPS clone URL

SSH clone URL

You can clone with HTTPS or SSH.

Download Gist

A demo of YAML anchors, references and nested values

View stooge_loader.rb
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"
# }
# }
# }
View stooge_loader.rb
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
View stooge_loader.rb
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

Thanks for your nice clean example of this.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.