@rubylang

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

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

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

тогда вопрос, зачем он нужен
затем, что dry-* это не про попытку сделать из руби строготипизированный функциональный язык

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
dry предоставляет удобный IoC, это с фп связанно как-то никак
по сути, основная идея dry в том, что он пропогандирует декомпозицию на функциональные объекты (оперейшены, сервисы, етц) и работу с этими объектами

почитав код вижу только вкряченную типизацию для валидаций
1. это только малая часть dry 2. кто-то, судя потому, что ты написал, решил сделать нормальную схему ваших данных для xlsx, вот и все

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
пока основная проблема, которую я вижу в том, что данные аще всего приходят через контроллер со strong_params или grape и они уже провалидированы
основная проблема в: 1. существует не только рельса и грейп 2. даже с рельсой оно работает хорошо https://mensfeld.pl/2017/03/dry-validation-as-a-schema-validation-layer-for-ruby-on-rails-api/

мне интересен именно пример ситуации, когда оно реально нужно и полезно
ну ок, ситуации: 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 просто будет в другом месте

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
ты же понимаешь, что это говнокод?
говнокод конечно, но как dry позволит его обойти?

Anton
25.06.2017
09:59:48
тоесть, по большей части dry используется вне Рельсы для получения отсусвтующего функционала?
скорее dry нужен для декомпозиции твоей логики и последующей работы с ней изолированно

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

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

Anton
25.06.2017
10:00:14
говнокод конечно, но как dry позволит его обойти?
Admin::CreateScheme Web::CreateScheme Admin::UpdateScheme ...

вот, нашел. для рельсы есть вот такая штука, которую я не проверял 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
для этого конеш можно накостылить FormObject но думаю dry-v тут вообще ок подойдёт
ты можешь использовать форм объект с драй валидацией тоже

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
например, если говорить про dry-matcher, то это тоже полезная штука
у меня есть реальный юз кейс, где это работает

пользователь может прислать ссылку на гитхаб ишю или гитлаб ишю (в будущем на битбакет и так далее), тебе надо определить что за ссылка, валидна она или нет и вызвать нужный код в зависимости от

вот так это выглядит в экшене

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 - это такой вот рейлс киллер или что это попытка сделать строготипизированный руби :)

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

Aleksey
25.06.2017
10:12:07
а вот сам матчер https://github.com/ossboard-org/ossboard/blob/master/lib/ossboard/matchers/git_host_matcher.rb
А это нормально объявлять GITHUB_ISSUE_REGEXP на верхнем уровне?

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
особенно регекспы так любят

Страница 1081 из 1684