Size: a a a

Ruby, Rails, Hanami | dry-rb

2020 March 21

YR

Yaroslav Rodnin in Ruby, Rails, Hanami | dry-rb
источник

AD

Anton Davydov in Ruby, Rails, Hanami | dry-rb
Alexander Alyoshin
Что за схема валидации? Не понимаю тебя
источник

AA

Alexander Alyoshin in Ruby, Rails, Hanami | dry-rb
это опять dry, а я так понял что говоря о "схеме", ты говоришь не в контексте dry-библиотек
источник

AD

Anton Davydov in Ruby, Rails, Hanami | dry-rb
David Salamau
логика, согласно которой происходит валидация, как я понял
Да, она самая. У тебя проверяется схема данных, те наличие полей и данных определенного типа
источник

AA

Alexander Alyoshin in Ruby, Rails, Hanami | dry-rb
Anton Davydov
Да, она самая. У тебя проверяется схема данных, те наличие полей и данных определенного типа
Ага, понял. Спасибо
источник

AD

Anton Davydov in Ruby, Rails, Hanami | dry-rb
Alexander Alyoshin
это опять dry, а я так понял что говоря о "схеме", ты говоришь не в контексте dry-библиотек
Ты можешь сделать все тоже самое и без драй
источник

AA

Alexander Alyoshin in Ruby, Rails, Hanami | dry-rb
окей
источник

AD

Anton Davydov in Ruby, Rails, Hanami | dry-rb
Хоть руками написать, просто будешь другую библиотеку вызывать
источник

AD

Anton Davydov in Ruby, Rails, Hanami | dry-rb
На хабре парень делился своей имплементацией библиотеки для валидации схем данных, где все на хешах
источник

AA

Alexander Alyoshin in Ruby, Rails, Hanami | dry-rb
Кажется всё понял. Спасибо всем за помощь! @davydovanton Yaroslav @dsalamau @theendcomplete @unkmas @MeDaveD
источник

PT

Pavel Tkachenko in Ruby, Rails, Hanami | dry-rb
Alexander Alyoshin
Вот и было интересно узнать как правильно. Пока всё сводится к трём моментам:
- rails way, через permit и ar-validations
- сторонние решения (dry)
- какое-то решение со схемой
Вот пример коня в вакууме. Мы так юзали, сейчас модифицировали, но и с этим вариантом понятно.
https://gist.github.com/PavelTkachenko/fe8c8503ec546f886740c05e06dfc8ee
источник

PT

Pavel Tkachenko in Ruby, Rails, Hanami | dry-rb
dry-monads(do-notation, dry-validation, wisper)
источник

AD

Anton Davydov in Ruby, Rails, Hanami | dry-rb
Pavel Tkachenko
Вот пример коня в вакууме. Мы так юзали, сейчас модифицировали, но и с этим вариантом понятно.
https://gist.github.com/PavelTkachenko/fe8c8503ec546f886740c05e06dfc8ee
А не думали взять систему ещё?
источник

PT

Pavel Tkachenko in Ruby, Rails, Hanami | dry-rb
Круто было бы уехать с эктив-рекорда, но слишком много юзаем готовых решений к нему типа ransack
источник

PT

Pavel Tkachenko in Ruby, Rails, Hanami | dry-rb
Anton Davydov
А не думали взять систему ещё?
Сейчас взяли уже)
источник

AD

Anton Davydov in Ruby, Rails, Hanami | dry-rb
источник

AA

Alexander Alyoshin in Ruby, Rails, Hanami | dry-rb
Anton Davydov
А не думали взять систему ещё?
какую систему?
источник

PT

Pavel Tkachenko in Ruby, Rails, Hanami | dry-rb
Стандартизировали Failure по другому
Все фейлуры с кодом и пейлодом при необходимости

Failure(code: :validation_error, payload: {email: [‘must be filled’]})
Failure(code: :contract_sign_error, payload: { some_specific_error: some_description })

Их удобно в 2.7 паттерн-матчингом разбирать. Проверяем
источник

AA

Alexander Alyoshin in Ruby, Rails, Hanami | dry-rb
Pavel Tkachenko
Вот пример коня в вакууме. Мы так юзали, сейчас модифицировали, но и с этим вариантом понятно.
https://gist.github.com/PavelTkachenko/fe8c8503ec546f886740c05e06dfc8ee
ага, спасибо, гляну
источник

PT

Pavel Tkachenko in Ruby, Rails, Hanami | dry-rb
Pavel Tkachenko
Стандартизировали Failure по другому
Все фейлуры с кодом и пейлодом при необходимости

Failure(code: :validation_error, payload: {email: [‘must be filled’]})
Failure(code: :contract_sign_error, payload: { some_specific_error: some_description })

Их удобно в 2.7 паттерн-матчингом разбирать. Проверяем
Сделали это так потому как есть раширение to_monad у dry-validation, которое приводит ошибки к виду Failure({ key: [‘err1’, `err2`] })
А рекомендуемый на dry-rb формат кастомных ошибок Failure(:some_error)

Бывает, что с кастомной ошибкой нужно передать важную информацию. Например не хватило баланса для списания, в ошибке передаем сколько баланс, сколько нужно списать, сколько не хватило.

Поэтому перешли к единой схеме

Failure(code: :failure_code, payload: {})
источник