Size: a a a

Ruby, Rails, Hanami | dry-rb

2020 February 14

u

unkmas in Ruby, Rails, Hanami | dry-rb
Пацаны, а кто тут евангелист dry? (@davydovanton)

Решил я тут попользовать dry-validation для обработки параметров в контроллере. Вопрос в том, а где предлагается производить трансформацию параметров? Например:

На вход приходит {price: 100, ...}
Интерактор ожидает на входе {price_from: 100, ... }

Производить транформацию на уровне интерактора - плохо, появляется зависимость бизнес-логики от контроллера
Производить трансформацию на уровне контракта - апи dry-validation не позволяет и контрибьюторы пишут, что это "не место для таких действий"

А каким образом предлагается проводить трансформацию? Ещё одна прослойка между контрактом и бизнес-логикой?
источник

ᏢᎡᎾXYᏃ in Ruby, Rails, Hanami | dry-rb
Всем привет.
Возник такой вопрос, можно ли как-то вызывать метод перед вызовом методов класса, не модифицируя сам класс?
источник

VK

Vasya Kuzmik in Ruby, Rails, Hanami | dry-rb
def new_method
method
method_2
end

Не подойдет?
источник

OA

Ortemy Alexandrovich in Ruby, Rails, Hanami | dry-rb
unkmas
Пацаны, а кто тут евангелист dry? (@davydovanton)

Решил я тут попользовать dry-validation для обработки параметров в контроллере. Вопрос в том, а где предлагается производить трансформацию параметров? Например:

На вход приходит {price: 100, ...}
Интерактор ожидает на входе {price_from: 100, ... }

Производить транформацию на уровне интерактора - плохо, появляется зависимость бизнес-логики от контроллера
Производить трансформацию на уровне контракта - апи dry-validation не позволяет и контрибьюторы пишут, что это "не место для таких действий"

А каким образом предлагается проводить трансформацию? Ещё одна прослойка между контрактом и бизнес-логикой?
Точно таким же, каким бы она проводилась без dry-v
источник

u

unkmas in Ruby, Rails, Hanami | dry-rb
Без dry-v я бы сделал это внутри контракта, но они предлагают делать это за пределами
источник

u

unkmas in Ruby, Rails, Hanami | dry-rb
Понятно, что я могу сделать, меня интересует их философия в данном случае
источник

OA

Ortemy Alexandrovich in Ruby, Rails, Hanami | dry-rb
Dry-v нужен для валидации. Все.
Не для того что бы ключи перетасовывать.
источник

ᏢᎡᎾXYᏃ in Ruby, Rails, Hanami | dry-rb
Vasya Kuzmik
def new_method
method
method_2
end

Не подойдет?
Нужно будет всем методам класса так написать
Да и это не подойдёт, так как модифицируется сам класс.
Сейчас я юзаю сlass_eval, а в конце выполнения кода убираю модификацию. Но появился баг, который из-за каких-то непонятных причин не убирает модификацию
источник

IM

Igor Morozov in Ruby, Rails, Hanami | dry-rb
ну валидации всякие бывают, да. не забывай, что в dry-v ещё есть часть с приведением типов
источник

OA

Ortemy Alexandrovich in Ruby, Rails, Hanami | dry-rb
Приведение типов цэ не манипуляции с ключами
источник

IM

Igor Morozov in Ruby, Rails, Hanami | dry-rb
при приведении ключи тоже можно перевести, тут можно терминологией спекулировать
источник

IM

Igor Morozov in Ruby, Rails, Hanami | dry-rb
вообще, стоит взять transproc, который уже https://github.com/dry-rb/dry-transformer, и просто воткнуть его как следующий шаг после валидации
источник

IM

Igor Morozov in Ruby, Rails, Hanami | dry-rb
типа

raw_validated_params = yield Contract.call(input)
validated_params = transformer.call(raw_validated_params)
источник

IM

Igor Morozov in Ruby, Rails, Hanami | dry-rb
можно переписать в любимом стиле, но идея такая. ответственность не особо размывается
источник

AD

Anton Davydov in Ruby, Rails, Hanami | dry-rb
unkmas
Пацаны, а кто тут евангелист dry? (@davydovanton)

Решил я тут попользовать dry-validation для обработки параметров в контроллере. Вопрос в том, а где предлагается производить трансформацию параметров? Например:

На вход приходит {price: 100, ...}
Интерактор ожидает на входе {price_from: 100, ... }

Производить транформацию на уровне интерактора - плохо, появляется зависимость бизнес-логики от контроллера
Производить трансформацию на уровне контракта - апи dry-validation не позволяет и контрибьюторы пишут, что это "не место для таких действий"

А каким образом предлагается проводить трансформацию? Ещё одна прослойка между контрактом и бизнес-логикой?
Я обычно пишу маппер который вызывается после валидации и все трансформируется в нужный хеш
источник

AD

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

AD

Anton Davydov in Ruby, Rails, Hanami | dry-rb
Как видишь, драй тут вообще не нужен
источник

u

unkmas in Ruby, Rails, Hanami | dry-rb
Anton Davydov
Я обычно пишу маппер который вызывается после валидации и все трансформируется в нужный хеш
Да не, понятно, что драй тут не нужен. Можешь пояснить логику, почему dry предлагает делать это не в самом контракте?
источник

IM

Igor Morozov in Ruby, Rails, Hanami | dry-rb
а как эта логика вписывается в идею контракта? я вот это не понял сейчас
источник

u

unkmas in Ruby, Rails, Hanami | dry-rb
Контракт же производит coercion. Трансформация тут ничем не отличается от неё концептуально
источник