是否有任何插件可以同步两个YAML文件?例如,file1有
en:
key1: "Value1"
key2: "Value2"
es:
key1: "EsValue1"
同步后,需要在第二个文件中添加key2:“Value2”,而不会干扰第二个文件中的顺序和key1。
答案 0 :(得分:2)
我不确定这是否会保留你想要的顺序,但是如果你使用Ruby 1.9,很可能因为它使用的是排序哈希。您可以使用YAML.load_file
将YAML文件的内容读入哈希值,然后执行以下操作:
merger = proc { |key, v1, v2| Hash === v1 && Hash === v2 ? v1.merge(v2, &merger) : v2 }
es.merge(en, &merger)
然后再将es hash转储到YAML文件中。
此处建议使用此递归合并解决方案:http://www.ruby-forum.com/topic/142809#635081
答案 1 :(得分:1)
您真的不需要插件来执行此操作:
str = <<EOT
en:
key1: "Value1"
key2: "Value2"
es:
key1: "EsValue1"
EOT
require 'yaml'
yaml = YAML::load(str)
(hash['en'].keys - hash['es'].keys).each{ |k| hash['es'][k] = hash['en'][k] }
>> ap hash #=> nil
{
"en" => {
"key1" => "Value1",
"key2" => "Value2"
},
"es" => {
"key1" => "EsValue1",
"key2" => "Value2"
}
}
如果要处理任意数量的其他哈希值:
(yaml.keys - ['en']).each do |h|
(yaml['en'].keys - yaml[h].keys).each do |k|
yaml[h][k] = yaml['en'][k]
end
end
因此,阅读YAML文件,通过代码运行生成的哈希,然后再次写入文件。