Отсутствует модуль при использовании DryValidations для проверки параметров запроса
У меня есть конечная точка jsonapi, где я получаю параметр запроса "include" с несколькими объектами, разделенными символом ","
Теперь я проверяю свои параметры с помощью Dry::Validations и хотел бы предварительно обработать это поле, чтобы получить массив строк. Чтобы добиться этого, я сделал это в соответствии с документом:
module CustomTypes
include Dry::Types.module
IncludeRelatedObject = Types::String.constructor do |itm|
itm.split(',')&.map :chomp
end
end
Теперь, когда я запускаю свои тесты, я получаю эту ошибку:
Ошибка / Ошибка: IncludeRelatedObject = Types::String.constructor do |itm| itm.split(',')&.map: конец chomp
NameError: неинициализированная константа CustomTypes::Types
И это моя проверка:
Dry::Validation.Params do
configure do
config.type_specs = true
end
optional(:include, CustomTypes::IncludeRelatedObject).each { :filled? & :str? }
end
Есть идеи, что не так с моим кодом?
2 ответа
include Dry::Types.module
в основном включает константы в модуль, в который он включен. Ты получил CustomTypes::String
среди других, и это то, на что следует ссылаться в вашем пользовательском типе:
module CustomTypes
include Dry::Types.module
# IncludeRelatedObject = Types::String.constructor do |itm|
IncludeRelatedObject = CustomTypes::String.constructor do |itm|
itm.split(',').map(&:chomp)
end
end
Чтобы определить пользовательский тип для проверок, вы должны использовать модуль Types. Таким образом, вы должны изменить имя модуля с CustomTypes
в Types
,
module Types
include Dry::Types.module
IncludeRelatedObject = Types::String.constructor do |itm|
itm.split(',')&.map :chomp
end
end