用Ruby中的继承保存YAML



我的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"

最新更新