Использование Prismatic/ схемы для проверки формы с помощью Liberator

Является ли Prismatic / схема подходящим для проверки формы? Я никогда не проектировал lib для валидации форм, но я представляю, что он выводит что-то вроде этого, а не создает исключения на s/validate:

{::errors {:name [{:missing "Required field."}
                  {:length "Must be at least 3 characters."}]
           :email [{:email "Must be a valid email address"}]}}

Я надеюсь, что кто-то использовал его с Compojure и Liberator, но я ничего не могу найти в Интернете.

3 ответа

Нашел на GitHub отличных помощников в Dante, но лицензия на использование не ясна:

(ns dante.tools.schemas
  (:require [dante.tools.namespaces :refer [export]]
            [schema.core :as s]
            [schema.coerce :as coerce]
            [schema.utils :refer [validation-error-explain]])
  (:import [schema.utils NamedError ValidationError]))

(defn explain [errors]
  (cond
   (map? errors)
   (->> errors
        (map (fn [[k v]]
               [k (explain v)]))
        (into {}))

   (or (seq? errors)
       (coll? errors))
   (map explain errors)

   (instance? NamedError errors)
   [(.name errors)
    (explain (.error errors))]

   (instance? ValidationError errors)
   (str (validation-error-explain errors))

   :else
   (str errors)))

(defn- coercercions [schema]
  (or
   (coerce/+string-coercions+ schema)
   (coerce/set-matcher schema)))

(defn validate [schema value]
  ((coerce/coercer schema coercercions) value))

Я уже давно использую схему для проверки общей формы (ClojureScript) и на стороне сервера (Clojure), и это получилось очень хорошо.

Первоначально я опубликовал предложение по использованию схемы таким образом на GitHub:

Ссылка здесь

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

Из вашего описания карты ошибок, которую вы хотите в случае ошибки проверки, похоже, что Validateur подойдет. Цитирование на странице "Начало работы":

Validateur - это библиотека валидации, вдохновленная ActiveModel Руби. Validateur является функциональным: валидаторы являются функциями, наборы валидации являются функциями высшего порядка, результаты валидации возвращаются в виде значений.

Вокруг этого небольшого ядра Validateur можно расширить любым пользовательским валидатором, который вам может понадобиться: это так же просто, как определить функцию Clojure, которая соответствует простому контракту.

Другие вопросы по тегам