2017-03-24 8 views
1

以下に示すように、クロージャのスキーマ入力を文字列として検証できます。Clojureスキーマ入力を小文字に変換します。

name :- s/Str, 
place :- s/Str, 

どのように私は

/小文字にそれを強制変換します
email : - s/Email 

のように使用する電子メールのためのdefschemaを書くことができます。

答えて

2

私は...正確に一つを持って起こる

(ns myapp.utils.schema 
    (:import [org.apache.commons.validator.routines EmailValidator]) 
    (:require [clojure.string :as str] 
      [schema.core :as s] 
      [schema.coerce :as sco])) 

(def valid-email? "Checks that the value is a valid email string." 
    (let [ev (EmailValidator/getInstance)] 
    (fn [s] 
     (and 
     (string? s) 
     (.isValid ev, ^String s) 
     )))) 

(def Email "Email schema type, stricter than schema.core/Str." 
    (s/pred valid-email?)) 

(defn sanitize-email [s] 
    (if (string? s) 
    (-> s str/lower-case str/trim) 
    s)) 

(defn email-matcher [s] 
    (when (= Email s) sanitize-email)) 


(def matcher 
    "The Plumatic matcher used for Plumatic schema coercion in myapp." 
    (sco/first-matcher [email-matcher,,,])) 

(defn coercer 
    [schema] 
    (sco/coercer schema matcher)) 

;; ... 

(ns myapp.customer 
    (:require [schema.core :as s] 
      [myapp.utils.schema :as sc])) 

(def Customer 
    {:customer/email sc/Email 
    :customer/name s/Str}) 

(def coerce-customer (sc/coercer Customer)) 

(coerce-customer {:customer/email "[email protected] " 
        :customer/name "Valentin"}) 
=> {:customer/email "[email protected]" 
    :customer/name "Valentin"} 
関連する問題