
Fedor
25.06.2017
09:45:17
тогда вопрос, зачем он нужен

Vasiliy
25.06.2017
09:45:24
ну ты такой в чатах like a boss можешь писать что рельса гавно и оверхед и оверскилл

Anton
25.06.2017
09:45:30
скорее ты можешь задать явно типизированную схему для валидации и для дата объектов

Google

Fedor
25.06.2017
09:46:22
я пока с dry столкнулся в виде модуля импорта из xlsx

Anton
25.06.2017
09:46:33
dry предоставляет удобный IoC, это с фп связанно как-то никак

Fedor
25.06.2017
09:46:37
кто-то его туда раньше вкрутил, и я уже давно морально готовлючь выпились нафиг
почитав код вижу только вкряченную типизацию для валидаций

Anton
25.06.2017
09:47:37

Fedor
25.06.2017
09:48:53
ага, и судя по всему на пол пути ему надоел список типов в 200 строк и он завернул все в хэши
и стла проверять что из парсилки приходит хэш
круто

Anton
25.06.2017
09:49:16
я не видел код, так что я ничего не могу сказать тебе

Fedor
25.06.2017
09:49:44
вообще есть где-нибудь примеры его адекватного использования?

Anton
25.06.2017
09:49:55
в целом это выглядит вот так:
1. ты объявляешь схему данных

Google

Anton
25.06.2017
09:50:24
после чего, вызываешь call у схемы и передаешь туда твои данные
получаешь объект, который говорит валидны данные в зависимости от схемы или нет
все

Fedor
25.06.2017
09:51:02
это дока

Anton
25.06.2017
09:51:10
это дока
а в доке не бывает примеров адекватного испольования?

Fedor
25.06.2017
09:51:46
пока основная проблема, которую я вижу в том, что данные аще всего приходят через контроллер со strong_params или grape и они уже провалидированы
это пример синтаксиса, а не использования
мне интересен именно пример ситуации, когда оно реально нужно и полезно
тут недавно митап был в здании телеграфа, там мужик рассказывал, как использовать dry вместо валидаций ActiveRecord
но так и не рассказал, зачем

Nikita
25.06.2017
09:53:14
да, интересно зачем
это просто как альтернатива?

Fedor
25.06.2017
09:53:27
ну типа того

Anton
25.06.2017
09:53:28
мне интересен именно пример ситуации, когда оно реально нужно и полезно
ну ок, ситуации:
1. мы в ханами используем dry-v для валидации параметров под каждый эндпоинт. То же делается в трейлблейзере и в dry-web.
2. ты можешь самостоятельно использовать такую штуку в той же синатре, и тебе не придется тащить AR, сиквела будет достаточно
3. ты можешь проверять вообще любые данные, например в клиенте к API
да, интересно зачем
если говорить зачем:
проблема валидации данных не должна быть в модели данных. это две разные логики. как пример, у тебя есть админка и веб, надо и там и там создавать посты. в вебе должна быть одна валидация (очень строгая и на кучу полей), а в админке другая (там может быть она лайтовие)
когда твоя валидация завязана на модель данных, ты не можешь такие кейсы адекватно разрулить, потому что тебе придется ебаться с моделью

Google

Anton
25.06.2017
09:57:44
когда валидация изолированна от модели, ты можешь написать 2 схемы и абсолютно легко и не зависимо проверять твои данные где угодно и как угодно

Fedor
25.06.2017
09:58:24
ну это вопрос одно if: lambda {} по сути, и если написать две схемы на dry то этот if просто будет в другом месте

Anton
25.06.2017
09:58:38
объясню даже почему

Fedor
25.06.2017
09:58:50
тоесть, по большей части dry используется вне Рельсы для получения отсусвтующего функционала?

Anton
25.06.2017
09:59:19
1. ты добавляешь условие с лямбдой, которое достаточно сложно читается и тестируется.
2. что будешь делать, когда у тебя будет 4 эндпоинта для поста и везде разная валидация?

Fedor
25.06.2017
09:59:29

Anton
25.06.2017
09:59:48

Nikita
25.06.2017
09:59:56
Использовать разные схемы в клнтроллерах?

Fedor
25.06.2017
10:00:00
там просто будет в одной модели две схемы валидации и в зависимости от контекста будет вызываться одна, или другая

Anton
25.06.2017
10:00:14
вот, нашел. для рельсы есть вот такая штука, которую я не проверял
https://github.com/kirs/dry-params

Vasiliy
25.06.2017
10:01:13
вот кста под это очень ок dry-v подходит, ибо strong parameters в рельсе тупая довольно штука

Anton
25.06.2017
10:01:32

Nikita
25.06.2017
10:01:52
Они рано или поздно обыграют это чем-то

Anton
25.06.2017
10:02:03
что делать, если у тебя может быть параметр только строкой, но тебе пихают число? например какой-нибудь мамкин хацкер руками запрос с данными закинет тебе

Vasiliy
25.06.2017
10:02:24
да, тупо проверка что там есть _что-то_ или нихуя, работаешь с этим а потом при сохранении модель такая - а вот хуй, не валидно же

Anton
25.06.2017
10:02:42
как мне говорил аарон и другой кор разработчик, проблема рельсы в ее инертности и очень сложно делать что-то новое ибо люди сложно принимают это

Google

Anton
25.06.2017
10:03:15
1. ты проверяешь одно поле в контроллере, а потом проверяешь это все в моделе

Vasiliy
25.06.2017
10:03:15
именно так)

Anton
25.06.2017
10:03:26
тебе не кажется это немного странным?

Vasiliy
25.06.2017
10:03:38
для этого конеш можно накостылить FormObject но думаю dry-v тут вообще ок подойдёт

Anton
25.06.2017
10:04:00

Vasiliy
25.06.2017
10:04:00
да, я наверное хуёво излагаю мысли, но вижу плюсы dry-v
форм обжекты ж вроде и нужны чтобы проверить структуру данных, не?

Anton
25.06.2017
10:04:54
dry-v и вообще dry-* не говорят вам, что мол что-то говно и не используйте это. они говорят, что используете изолированные объекты и держите логику в одном месте

Admin
ERROR: S client not available

Anton
25.06.2017
10:05:21
простой пример, тебе пост пришел в мд, а его надо в html сохранить, что бы показывать
ты можешь это делать в форм объекте
например, если говорить про dry-matcher, то это тоже полезная штука

Vasiliy
25.06.2017
10:06:06
т.е. не только проверить данные но и подготовить?

Anton
25.06.2017
10:06:15
пользователь может прислать ссылку на гитхаб ишю или гитлаб ишю (в будущем на битбакет и так далее), тебе надо определить что за ссылка, валидна она или нет и вызвать нужный код в зависимости от
вот так это выглядит в экшене
https://github.com/ossboard-org/ossboard/blob/master/apps/api/controllers/issue/show.rb#L24-L28

Google

Anton
25.06.2017
10:08:26
а вот сам матчер
https://github.com/ossboard-org/ossboard/blob/master/lib/ossboard/matchers/git_host_matcher.rb

Stanislav
25.06.2017
10:09:18
Антон всех задавил драем :)

Anton
25.06.2017
10:09:59
ну зато мб в будущем не будет мнения, что dry - это такой вот рейлс киллер или что это попытка сделать строготипизированный руби :)

v
25.06.2017
10:10:08

Anton
25.06.2017
10:10:23
прямо дело говорит

Aleksey
25.06.2017
10:12:07

Anton
25.06.2017
10:12:39
если говорить про dry-container, то там есть один очень крутой пример, как можно легко избавится от толстохудых моделей и контроллеров

Stanislav
25.06.2017
10:12:41
все так делают О_О

Anton
25.06.2017
10:12:53

Stanislav
25.06.2017
10:13:11
ну в рельсах много такого, кек

Anton
25.06.2017
10:13:23
я бы лучше обернул все в Matchers::GitHost::Matcher

Aleksey
25.06.2017
10:13:42

Anton
25.06.2017
10:13:44
но коду уже больше полугода и писался он просто для проверки идеи
ну собственно да, это надо оборачивать в неймспейс в идеале
но основная идея в том, что такие штуки работают и помогают жить
например, такой код просто тестировать

Stanislav
25.06.2017
10:15:05

Aleksey
25.06.2017
10:16:17

Stanislav
25.06.2017
10:16:29
особенно регекспы так любят