Предлагаю на летнюю встречу короткий доклад, минут на 10. Мои утилиты для отчётов читают YAML-конфиг, и пользователи регулярно присылают его с опечатками: formta вместо format, строка вместо списка колонок. Раньше утилита честно начинала работу и через десять минут падала с NoMethodError на nil где-то в глубине. Теперь конфиг проверяется на старте через dry-schema, и человек сразу видит все ошибки списком:
require "dry/schema"
require "yaml"
ConfigSchema = Dry::Schema.Params do
required(:source).filled(:string)
required(:format).value(included_in?: %w[csv xlsx])
optional(:columns).array(:string)
end
result = ConfigSchema.call(YAML.safe_load_file("report.yml"))
abort result.errors.to_h.inspect if result.failure?
Расскажу, как писать понятные сообщения об ошибках, как проверять вложенные секции и когда схема того не стоит.
А чем это лучше, чем руками проверить пару ключей через fetch? Для конфига на пять полей dry-schema выглядит тяжеловато, он ещё и тянет за собой несколько gem'ов.
В Python для такого берут pydantic, и после него без схемы конфига уже неуютно. Приду посмотреть, как это выглядит в Ruby
puts_hello, на пять полей fetch честно хватает, я с него и начинал. Схема окупается, когда полей двадцать, есть вложенность и хочется показать пользователю все ошибки сразу, а не по одной за запуск. По весу да, тянет dry-types, dry-logic и ещё пару, на старте CLI это плюс 40 мс, замерял. viktor.petrov поставил доклад на июль.