0

我有带有继承的 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)
4

2 回答 2

0

要添加新部分:

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"
于 2017-05-04T11:12:34.090 回答
0

据我所知(我也使用该选项来导入覆盖)YAML 源被读取和处理,然后散列元素被公开并且没有在内部链接。所以机制是复制粘贴覆盖而不是链接和重载。

我猜你必须通过打开文件来修改 YAML 源并修改它的内容,如果你不破坏你的源。

于 2017-05-03T12:40:14.957 回答