Size: a a a

Saint P Ruby Community

2020 May 27

AG

Alex G in Saint P Ruby Community
ну это тонкий момент. В какой момент проверка на формат становится валидацией.
Я бы хотел сделать кастомный предикат в dry-logic, чтобы его использовать в типах и в валидациях.

Например, в валидациях есть что-то вроде
required(:month).filled(:integer, included_in?: 1..12)


Я ищу кастомный тип, который делает проверку данных, либо кастомный предикат для валидаций.
источник

AG

Alex G in Saint P Ruby Community
Я думаю, что нормально было бы написать required(:month).filled(Types::Month)
Только с месяцем все понятно, а с телефоном нет 🤷‍♂️
источник

AG

Alex G in Saint P Ruby Community
а, вижу там Никита про case написал. Должно помочь, наверное
источник

AD

Anton Davydov in Saint P Ruby Community
Alex G
Я думаю, что нормально было бы написать required(:month).filled(Types::Month)
Только с месяцем все понятно, а с телефоном нет 🤷‍♂️
А, так тебе не тип нужен, а предикат
источник

AG

Alex G in Saint P Ruby Community
Anton Davydov
А, так тебе не тип нужен, а предикат
да. но я его планировал потом в тип засунуть. Ну или в dry-v.
Но, честно говоря, я не совсем понимаю. Есть ли что-то зазорное, что мне хочется иметь тип "Телефон" в приложении? )
источник

AD

Anton Davydov in Saint P Ruby Community
Alex G
да. но я его планировал потом в тип засунуть. Ну или в dry-v.
Но, честно говоря, я не совсем понимаю. Есть ли что-то зазорное, что мне хочется иметь тип "Телефон" в приложении? )
Тут скорее важно понимать что ты вообще хочешь. Если у тебя есть данные которые могут быть типом «телефон» то это ок. Если ты хочешь тип, который нужен только для конвертации данных из одного формата в другой + валидации - я бы не называл это типом
источник

AD

Anton Davydov in Saint P Ruby Community
Ну и наверно я бы задался с вопроса, зачем ты вообще решил уже работающее из валидации вытащить?
источник

AG

Alex G in Saint P Ruby Community
Я хочу вот что. На скринах то, что есть, и то, что хотелось бы.

Это dry-v.

Я бы хотел написать короче. Потому что много где повторяются эти вещи.

Еще я бы хотел сделать предобработку, чтобы на выходе из dry-v, строки были бы хотя бы strip-нуты. В моем понимании это как приведение к типу, когда мы делаем из '12' => 12.

ну и плюс проверка формата данных на входе. Что почта похожа на почту, а телефон на телефон.
источник

AG

Alex G in Saint P Ruby Community
источник

IM

Igor Morozov in Saint P Ruby Community
Лучшее из двух миров: конструктор с нормализацией + правило в dry-v

С правилами получатся более информативные сообщения об ошибке
источник

IM

Igor Morozov in Saint P Ruby Community
кстати, ты можешь сделать filled(:phone)
источник

AG

Alex G in Saint P Ruby Community
Igor Morozov
Лучшее из двух миров: конструктор с нормализацией + правило в dry-v

С правилами получатся более информативные сообщения об ошибке
такие же )
источник

AG

Alex G in Saint P Ruby Community
Igor Morozov
кстати, ты можешь сделать filled(:phone)
как?
источник

AD

Anton Davydov in Saint P Ruby Community
Igor Morozov
кстати, ты можешь сделать filled(:phone)
Вот думаю это и нужно как раз
источник

IM

Igor Morozov in Saint P Ruby Community
ну это просто о том, что ты тип можешь в контейнер положить
источник

IM

Igor Morozov in Saint P Ruby Community
источник

AG

Alex G in Saint P Ruby Community
а, ну это да. Но не решает проблему )
источник

IM

Igor Morozov in Saint P Ruby Community
ага))
источник

IM

Igor Morozov in Saint P Ruby Community
ну это прост чтоб типы более мило совать
источник

IM

Igor Morozov in Saint P Ruby Community
Alex G
такие же )
а почему такие же? 🤔
источник