Size: a a a

Saint P Ruby Community

2020 April 22

IM

Igor Morozov in Saint P Ruby Community
для меня это и было приятным изменением — библиотека стала куда более топорной, чем была.
источник

TP

Timur Platonov in Saint P Ruby Community
@morozzzko если честно, синтаксис required(:something, :integer) не застал, но второй выглядит логичнее, да. Для меня непредсказуемость в том, что код падает в рантайме.  Т.е. код .maybe(:int?) для неискушённого человека выглядит вполне нормально, он запускается, но не работает как должен. Я бы на месте авторов бил по рукам исключениями, когда пытаются делать что-то, что не должно работать
источник

IM

Igor Morozov in Saint P Ruby Community
а как он должен?
источник

TP

Timur Platonov in Saint P Ruby Community
должен проверить, что там целое число (или nil)
источник

IM

Igor Morozov in Saint P Ruby Community
а по факту что делает?
источник

TP

Timur Platonov in Saint P Ruby Community
по факту пишет что-то в духе, что поле должно быть integer. Хотя оно по сути им является
источник

IM

Igor Morozov in Saint P Ruby Community
А на входе точно интеджер, а не строка и не флоат?
источник

IM

Igor Morozov in Saint P Ruby Community
я напарывался на ошибку только в таких случаях:

contract.call(foo: 123.to_s)


т.е. когда было число в строке.

вот эта проверка как раз о том, что тебе на вход подали интеджер
источник

TP

Timur Platonov in Saint P Ruby Community
ну если вдаваться в детали, то в контракте была описана схема через params do/end. На вход подавались HTTP параметры, т.е. строки
источник

IM

Igor Morozov in Saint P Ruby Community
ну так в том-то и дело
источник

IM

Igor Morozov in Saint P Ruby Community
это проблема тех, кто работал с версией до 1.0. потому что там логика int? проверяла не то, что описано
источник

IM

Igor Morozov in Saint P Ruby Community
в 1.0 оно делает ровно то, что обещали — проверяет данные на входе
источник

IM

Igor Morozov in Saint P Ruby Community
я тоже наел много с этим, но дело оказалось не в бобине
источник

TP

Timur Platonov in Saint P Ruby Community
возможно, но мне всё же кажется, что это неочевидно) Мне не хочется учить нюансы библиотеки для понимания того, в чём разница между int? и integer, особенно, если раньше это работало по-другому
источник

IM

Igor Morozov in Saint P Ruby Community
> Мне не хочется учить нюансы библиотеки для понимания того, в чём разница между int? и intege

мне вот это немного непонятно

1. как можно использовать новый DSL, не изучив его основы?
2. они же в разных разделах документации лежат сейчас. каковы шансы, что новички столкнутся с этой проблемой?
источник

IM

Igor Morozov in Saint P Ruby Community
Понятно, что нужно проверки инпута и аутпута как-то разделять, чтобы это всё было более полезным. На форуме и в чяте разные варианты обсуждались
источник

IM

Igor Morozov in Saint P Ruby Community
Но вообще, если в доке непонятно написано, буду рад иссую — могу даже придумать, как обновить
источник

TP

Timur Platonov in Saint P Ruby Community
1 - легко. Смотришь только тот кусок, который тебе нужен, используешь его. Раньше был документирован способ с int?, он работал, всё ок. Потом появился новый способ, который изучать смысла не было (есть же что-то, что уже работает). Но потом оказалось, что это не работает, и пришлось узнавать детали.

Те, кто в глаза не видел 0.х, с этим, надеюсь, никогда и не столкнуться) И, надеюсь, нигде в интернете на найдут ответа на свой вопрос со старым синтакисом
источник

IM

Igor Morozov in Saint P Ruby Community
а там ещё и библиотека после 1.0 поменялась. неужели смогли сделать переход, не разобравшись в изменениях?
источник

IM

Igor Morozov in Saint P Ruby Community
ну т.е. нет никаких Dry::Validation.Params больше. Есть какие-то штуки в драй-схеме и контракт в драй-валидации. неужели этот переход менее болезненный, чем смена семантики у DSL?
источник