This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2016-07-14
Channels
- # admin-announcements (2)
- # beginners (8)
- # boot (75)
- # clara (2)
- # cljs-dev (3)
- # cljsjs (39)
- # cljsrn (1)
- # clojure (75)
- # clojure-brasil (3)
- # clojure-dusseldorf (13)
- # clojure-gamedev (1)
- # clojure-mexico (1)
- # clojure-quebec (5)
- # clojure-russia (30)
- # clojure-sg (3)
- # clojure-spec (25)
- # clojure-uk (65)
- # clojurescript (36)
- # core-async (1)
- # cursive (15)
- # data-science (6)
- # datomic (38)
- # devcards (29)
- # editors (1)
- # emacs (11)
- # funcool (6)
- # hoplon (43)
- # immutant (48)
- # lambdaisland (2)
- # leiningen (9)
- # mental-health (4)
- # mount (1)
- # numerical-computing (1)
- # off-topic (4)
- # om (19)
- # onyx (1)
- # pedestal (1)
- # proton (1)
- # re-frame (21)
- # reagent (1)
- # specter (8)
- # sql (3)
- # testing (14)
- # untangled (9)
- # yada (31)
@asolovyov: я struct
юзаю, так как тоже не нашел простого способа сделать "человеческие" ошибки из того, что clojure.spec
возвращает.
@niwinz: посоветовал struct
, так пока и на нем
@misha: Я свалил оттуда месяц назад, потому-что они кложуру не аппрувили
@misha: спека она прям совсем для программистов и для апи, а не для валидации юзерского инпута
там же есть explain-data вроде как раз для работы с ошибками из кода вроде, не?
@mkaschenko: ну надо сказать что мне поверх struct тоже пришлось чуть дорисовать для сообщений об ошибках; у меня, скажем, 3-4 валидатора на поле, а ошибку я хочу показывать одну и ту же - и сейчас либо её повторять, либо чуть-чуть сверху напилить своего. Жаль, не придумал как сделать валидатор-комбинатор других валидаторов (валидация ок работает, а вот :coerce
как повторить - хз), поэтому просто сверху прикрутил
@artemyarulin: expain-data тоже для программистов, лучше чем (not (pos? -5))
, но не для конечного пользователя
@artemyarulin: да ну его ошибки так же тяжело превратить в юзерские
А ну да, может оно не предназначено для этого. Хотя былоб круто если б спека и это могла
https://facebook.github.io/react/blog/2016/07/13/mixins-considered-harmful.html видели такое? facebook говорит что миксины в реакте зло
@asolovyov: а, тебе на юае ошибки для полей формы показывать? я бы всё равно спеку взял раздуплиться
А какие варианты вообще валидации?
- нахлобучить кучу ифов, и прихардкодить к ним выдуманное описание об ошибке, или
- взять спеку/схему/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 []})}
хотя стракт выглядит хорошо http://funcool.github.io/struct/latest/
Большой влюс в стракте что он очень простой
если писать валидацию изолированно для одной формы - вообще найс. а если нужен валидейшн реюз, все дела, я бы попытался спеку прикрутить. часто же видимые поля формы – сабсет апи реквеста, который наверняка чем-то почётче захочется провалидировать
n полей, я имею ввиду scope, например branch-name должно быть уникальным среди одного банка
@misha: ну у спека канеш получше, чем у схемы, с ошибками, но все равно, я бы вчера за час его не прикрутил
я для бизнес-валидаций вот такую штуку замутил на базе funcool/cats – https://github.com/konukhov/pipeline/blob/master/examples/example1.clj
но надо тащить монады. каждый раз в обсуждении валидаций пощу эту ссылку – если надоел, сорри 🙂
чем круты аппликативные функторы для валидаций – можно аггрегировать сообщения об ошибках. а сами валидации – обычные функции с теми же if
’ами, из которых можно составить композицию. но это все, ясное дело, к скиме и тд совсем никакого отношения не имеет.
для скимы я себе сделал простую штуку, которая превращает ответ скимы в плоский вектор “ключей ошибок” – мне этого достаточно, чтобы отдавать читаемые ответы из API. может тоже кому-то пригодится. https://gist.github.com/konukhov/52d97105f2eb8bb834d735436bd7eeca
@artemyarulin: нашел что-то на clojure?
@konukhov: нашел что-то на скале и чота как-то не очень в восторге прям 🙂