Fork me on GitHub
#clojure-russia
<
2016-07-14
>
maxim02:07:07

@asolovyov: я struct юзаю, так как тоже не нашел простого способа сделать "человеческие" ошибки из того, что clojure.spec возвращает. @niwinz: посоветовал struct, так пока и на нем

seryh05:07:07

а struct можно как то подружить с compojure-api ?

artemyarulin05:07:26

@misha: Я свалил оттуда месяц назад, потому-что они кложуру не аппрувили rich

asolovyov05:07:04

@misha: спека она прям совсем для программистов и для апи, а не для валидации юзерского инпута

artemyarulin05:07:13

там же есть explain-data вроде как раз для работы с ошибками из кода вроде, не?

asolovyov05:07:54

@mkaschenko: ну надо сказать что мне поверх struct тоже пришлось чуть дорисовать для сообщений об ошибках; у меня, скажем, 3-4 валидатора на поле, а ошибку я хочу показывать одну и ту же - и сейчас либо её повторять, либо чуть-чуть сверху напилить своего. Жаль, не придумал как сделать валидатор-комбинатор других валидаторов (валидация ок работает, а вот :coerce как повторить - хз), поэтому просто сверху прикрутил

maxim06:07:29

@artemyarulin: expain-data тоже для программистов, лучше чем (not (pos? -5)), но не для конечного пользователя

asolovyov06:07:40

@artemyarulin: да ну его ошибки так же тяжело превратить в юзерские

artemyarulin06:07:41

А ну да, может оно не предназначено для этого. Хотя былоб круто если б спека и это могла

delaguardo08:07:17

https://facebook.github.io/react/blog/2016/07/13/mixins-considered-harmful.html видели такое? facebook говорит что миксины в реакте зло

misha11:07:40

@asolovyov: а, тебе на юае ошибки для полей формы показывать? я бы всё равно спеку взял раздуплиться kappa

misha11:07:01

А какие варианты вообще валидации? - нахлобучить кучу ифов, и прихардкодить к ним выдуманное описание об ошибке, или - взять спеку/схему/etc. и нахлобучить полудинамические ошибки поверх всех этих (not (pos? -5)) и

(s/explain-data ::name-or-id :foo)
;;=> #:clojure.spec{
;;     :problems ({:path [:name],
;;                 :pred string?,
;;                 :val :foo,
;;                 :via [:spec.examples.guide/name-or-id],
;;                 :in []}
;;                {:path [:id],
;;                 :pred int?,
;;                 :val :foo,
;;                 :via [:spec.examples.guide/name-or-id],
;;                 :in []})}

misha11:07:39

хотя стракт выглядит хорошо http://funcool.github.io/struct/latest/

kronos_vano11:07:03

Большой влюс в стракте что он очень простой

misha12:07:39

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

misha12:07:09

ну а там уже и .cljc, и спека/схема, все дела

maxim12:07:09

кто как проверяет уникальность n полей в базе данных со struct?

maxim12:07:58

n полей, я имею ввиду scope, например branch-name должно быть уникальным среди одного банка

misha12:07:02

это ж валидатор, который будет ходить в базу/кеш нужен, нет?

misha12:07:38

и, наверное, это ортогонально библиотеке валидации

maxim12:07:24

> ортогонально библиотеке валидации я тоже об этом думал

misha12:07:31

тем более, если ты аж с клиента в базу на сервере пойдешь

maxim12:07:25

все так, да

asolovyov15:07:56

@misha: ну у спека канеш получше, чем у схемы, с ошибками, но все равно, я бы вчера за час его не прикрутил

misha15:07:28

ну если "за час" - тогда выбор очевиден

konukhov16:07:38

я для бизнес-валидаций вот такую штуку замутил на базе funcool/cats – https://github.com/konukhov/pipeline/blob/master/examples/example1.clj но надо тащить монады. каждый раз в обсуждении валидаций пощу эту ссылку – если надоел, сорри 🙂 чем круты аппликативные функторы для валидаций – можно аггрегировать сообщения об ошибках. а сами валидации – обычные функции с теми же if’ами, из которых можно составить композицию. но это все, ясное дело, к скиме и тд совсем никакого отношения не имеет.

konukhov16:07:44

для скимы я себе сделал простую штуку, которая превращает ответ скимы в плоский вектор “ключей ошибок” – мне этого достаточно, чтобы отдавать читаемые ответы из API. может тоже кому-то пригодится. https://gist.github.com/konukhov/52d97105f2eb8bb834d735436bd7eeca

konukhov16:07:21

@artemyarulin: нашел что-то на clojure?

artemyarulin18:07:18

@konukhov: нашел что-то на скале и чота как-то не очень в восторге прям 🙂