У меня есть файл yaml в формате:
parameters:
- param_name: age
requires:
- name
- param_name: height
requires:
- name
Исходя из этого формата, я хотел бы принять хеш ключей и значений и определить, является ли комбинация ключей и значений допустимой. Например, на основе приведенного выше примера, если кто-то отправил хэш со значениями:
{'age' => 15, 'height' => '6ft'}
это будет считаться недействительным, так как имя параметра является обязательным. Таким образом, действительное представление будет выглядеть как
{'age' => 15, 'height' => '6ft', 'name' => 'Abe Lincoln'}.
По сути, я хочу вот что:
Для каждого объекта параметра, если у него есть массив require под ним. Проверьте все параметры 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