Skip to content

Instantly share code, notes, and snippets.

@bowsersenior
Created May 18, 2011 23:18
Show Gist options
  • Save bowsersenior/979804 to your computer and use it in GitHub Desktop.
Save bowsersenior/979804 to your computer and use it in GitHub Desktop.
A demo of YAML anchors, references and nested values
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"
# }
# }
# }
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
# 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
@boozook
Copy link

boozook commented Aug 2, 2017

@fulldecent: not, it shouldn't work with array. See YAML refcard for spec 1.1.

<< : Merge keys from another mapping.

@eliadl
Copy link

eliadl commented Aug 24, 2017

Thanks for this @bowsersenior.
@fulldecent I've managed to do with final arrays via:

default_array: &DEFAULT_ARRAY
  - item_1
  - item_2

my_array: *DEFAULT_ARRAY
my_other_array:
  - item_3
  - item_4

@catmando
Copy link

thanks!

@kuvaldini
Copy link

Thank you. I looked for <<: *DEFAULT - it works!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment