我正在试验documentation
中Kwalify gem的合并地图功能当我在我的ruby脚本中加载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
YAML输入
group:
name: foo
email: foo@mail.com
user:
name: bar
email: bar@mail.com
答案 0 :(得分:0)
您不应在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
会被覆盖。