Отсутствует модуль при использовании 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
Другие вопросы по тегам