【发布时间】:2018-04-30 19:53:27
【问题描述】:
我有一个 yaml 文件,格式为:
parameters:
- param_name: age
requires:
- name
- param_name: height
requires:
- name
基于这种格式,我想接受键和值的散列,并确定键和值的组合是否有效。例如基于上面的例子,如果有人提交了一个带有值的哈希:
{'age' => 15, 'height' => '6ft'}
它会被认为是无效的,因为参数名称是必需的。所以一个有效的提交看起来像
{'age' => 15, 'height' => '6ft', 'name' => 'Abe Lincoln'}.
基本上我想要的是这样的:
对于每个参数对象,如果它下面有一个 requires 数组。检查该数组中元素的所有参数 param_names,如果缺少退出。
我有一个非常丑陋的双循环来检查这个,但我想收紧代码。我想我可以使用块来验证我需要的数据。到目前为止,这是我想出的:
require 'yaml'
requirements = YAML.load_file('./require.yaml')
require_fields = Array.new
requirements['parameters'].each do |param|
require_fields.concat(param['require']) if param.has_key? 'require'
end
require_fields.each do |requirement|
found = false
requirements['parameters'].each do |param|
if param['param_name'] == requirement
found = true
end
end
abort "#{requirement} is a required field" unless found
end
【问题讨论】:
标签: arrays ruby hash yaml block