>我正在尝试文档中 Kwalify gem 的合并地图功能
当我在红宝石脚本中加载 YAML 时,我没有看到值被合并。
parser = Kwalify::Yaml::Parser.new(@validator)
document = parser.parse_file(File.join(__dir__, "test_files", "values.yml"))
我认为我的理解有问题。如果我能获得更好的示例来理解 YAML 的地图合并功能以及检索 YAML 合并值的代码,那将非常有帮助。
YAML 架构
type: map
mapping:
"group":
type: map
mapping:
"name": &name
type: str
required: yes
"email": &email
type: str
pattern: /@/
required: no
"user":
type: map
mapping:
"name":
<<: *name # merge
length: { max: 16 } # add
"email":
<<: *email # merge
required: yes # override
亚姆输入
group:
name: foo
email: foo@mail.com
user:
name: bar
email: bar@mail.com
您应该不会在values.yml
中看到任何更改,因为架构中使用了合并地图功能。
基本上,这就是正在发生的事情。架构的这一部分
"user":
type: map
mapping:
"name":
<<: *name # merge
length: { max: 16 } # add
"email":
<<: *email # merge
required: yes # override
转换为
"user":
type: map
mapping:
"name":
type: str
required: yes
length: { max: 16 } # add
"email":
type: str
pattern: /@/
required: yes # override
如果您想查看更改,可以在values.yml
中使用此功能。
# values.yml
group: &foo
name: foo
email: foo@mail.com
user:
<<: *foo
email: bar@mail.com
然后:
parser.parse_file('values.yml')
=> {"group"=>{"name"=>"foo", "email"=>"foo@mail.com"}, "user"=>{"name"=>"foo", "email"=>"bar@mail.com"}}
查看如何合并name
foo
但覆盖email
。