Possible Duplicate:
Read and write YAML files without destroying anchors and aliases?
I am using ruby 1.9.3 with default yaml engine to modify yaml files on the fly within the app like this:
require 'yaml'
langs = YAML.load_file("i18n/de.yml")
langs["key"] = 'val' # change key to new value val
File.open("i18n/de.yml", 'w') do |f|
YAML.dump(langs,f)
end
This works very well, but I have a problem with aliases in the yml. So assume de.yml
is this:
---
main: &aliasName
key:
title: translation
another_key:
title: another translation
something:
<<: *aliasName
After calling the script like above, this get's translated to:
---
main:
key: &18803600
title: translation
another_key: &18803120
title: another translation
something:
key: *18803600
another_key: *18803120
key: val
If I now add something to main
by editing the file by hand, for example main.third_key
, it won't get aliased in something
since the alias was converted to explicitly only alias main.key
and main.another_key
between main
and something
.
So it looks like the aliases get dereferenced on YAML.dump
or YAML.load
. Is there any way to save the aliases like they are defined in the yaml file? de.yml
might look like this (I don't care if the alias name changes):
---
main: &18803600
key:
title: translation
another_key:
title: another translation
something:
<<: *18803600
key: val
Thanks for your help.