以编程方式生成yaml节点锚点和引用

时间:2012-05-25 16:45:46

标签: ruby-on-rails ruby yaml

我需要在Rails中以编程方式生成这个yaml:

foo: &foo
  x: 1
  y: 2

bar:
  <<: *foo
  z: 3

在解析它时应该给出这个哈希:

output = {
    :foo => {
        :x => 1,
        :y => 2
    },
    :bar => {
        :x => 1,
        :y => 2,
        :z => 3
    }
}

显然output.to_yaml给出了扩展语法。有没有办法以编程方式用anchor and nodes输出yml语法。

1 个答案:

答案 0 :(得分:0)

我有一个类似的功能,我从初始化器读取许多YAML文件并附加到全局变量。它是这样的:

APP = Hash.new
Dir.glob("#{Rails.root}/config/data/*.yml").each do |file|
  fdata = File.open(file).read
  APP.merge!(YAML::load(ERB.new(fdata).result(binding)).symbolize_keys!)
end

我应该更多地了解您的问题,以编写更具体的解决方案。

主要观点是YAML :: load方法,它读取de yaml格式化文本并输出哈希值。 ERB是因为Yaml文件可能包含应该被解释的erb标记。它可能需要也可能不需要。 symbolize_keys!是用[:symbols]而不是[“strings”]来访问键。