我的yaml文件带有继承,我想以编程方式添加或编辑密钥。我使用yaml.load方法将yaml加载到哈希中,但是当我使用yaml.dump保存哈希时,我会丢失所有继承信息。
有没有办法在Ruby中编辑YAML而不会丢失继承信息?
yaml示例:
main:
prod: &prod
key1: true
key2: 50
key3: "abc"
prod_v_3_5: &prod_v_3_5
<<: *prod
key2: 100
prod_v_3_6: &prod_v_3_6
<<: *prod_v_3_5
key2: 150
代码示例:
config = Api.get(id)
yaml = YAML.load(config)
yaml["main"][section].store(key, value)
config = YAML.dump(yaml)
Api.set(id, config)
据我所知(我还将该选项用于 import 和 Override (yaml源是读取和处理的,然后哈希元素被暴露而不是内部链接。因此,该机制是复制粘贴覆盖而不链接和超载。
我想您必须通过打开文件并修改其内容来修改YAML源,如果您不破坏源。
添加新部分:
config = Api.get(id)
config = "#{config}n n #{section}: &#{section}n <<: *#{parent_section}"
添加新值:
config = Api.get(id)
matches = /^(.+)(n #{section}:s*&#{section}s*n )(<<:[^n]+)?(.*)$/m.match(config)
config = "#{matches[1]}#{matches[2]}#{matches[3]}n #{key}: #{value}#{matches[4]}n"