首页 > 解决方案 > Ruby yaml 深度合并

问题描述

我对 Ruby 还很陌生,我继承了一些代码,这些代码对一些 YAML 进行了“深度合并”。这是相关部分:-

class ::Hash
    def deep_merge(second)
        merger = proc { |key, v1, v2| Hash === v1 && Hash === v2 ? v1.merge(v2, &merger) : Array === v1 && Array === v2 ? v1 | v2 : [:undefined, nil, :nil].include?(v2) ? v1 : v2 }
        self.merge(second.to_h, &merger)
    end
end

我发现 TBH 相当难以理解。当我将以下 YAML 传递给它时,它会倒下:-

- {key: nginx.ingress.kubernetes.io/auth-type, value: basic}
- {key: nginx.ingress.kubernetes.io/auth-secret, value: basic-auth}
- {key: nginx.ingress.kubernetes.io/auth-realm, value: 'Authentication Required.'}

“-”都在 yaml 输入中缩进,但代码格式在这里弄乱了。

这是我试图合并的 YAML 的精简版本(也失败了)

service:
  container:
    port: 3000

有任何想法吗?

标签: rubymergeyaml

解决方案


好的,我发现了问题。我忘记在 YAML 中添加标签(注解:),我一戴上它,它就又开始工作了。我应该删除问题吗?


推荐阅读