Just a bit more convenience with clojure.spec
Clojure CLI/deps.edn:
net.totakke/more.spec {:mvn/version "0.2.9"}
Leiningen/Boot:
[net.totakke/more.spec "0.2.9"]
more.spec.alpha
only-keys
:
(require '[clojure.spec.alpha :as s]
'[more.spec.alpha :as ms])
(s/def :acct/first-name string?)
(s/def :acct/last-name string?)
(s/def :acct/middle-name string?)
(s/def :acct/person
(ms/only-keys :req [:acct/first-name :acct/last-name]
:opt [:acct/middle-name]))
(s/valid? :acct/person
{:acct/first-name "Bugs"
:acct/last-name "Bunny"
:acct/email "test@example.com"}) ; :acct/email is not defined.
;;=> false
re-find
:
(s/def :greeting/hello (ms/re-find #"Hello"))
(s/valid? :greeting/hello "Hello, world!")
;;=> true
(s/valid? :greeting/hello "Goodbye, world!")
;;=> false
re-matches
:
(s/def :greeting/hello (ms/re-matches #"Hello"))
(s/valid? :greeting/hello "Hello")
;;=> true
(s/valid? :greeting/hello "Hello, world!")
;;=> false
more.spec.alpha.test
valid?
in clojure.test:
(require '[clojure.test :refer [deftest is]]
'[more.spec.alpha.test])
(s/def :int/pos (s/and integer? pos?))
(deftest int-pos-test
(is (valid? :int/pos -1)))
(int-pos-test)
;; FAIL in (int-pos-test)
;; expected: (valid? :int/pos -1)
;; actual: -1 - failed: pos? spec: :int/pos ; spec failure is explained.
;;=> nil
more.spec.alpha.specs
::mspecs/email
:
(require '[clojure.spec.gen.alpha :as gen]
'[more.spec.alpha.specs :as mspecs])
(s/valid? ::mspecs/email "test@example.com")
;;=> true
(gen/generate (s/gen ::mspecs/email))
;;=> "di.i003glc@ehmipb.osed.org"
::mspecs/iso-local-date
:
(s/valid? ::mspecs/iso-local-date "2025-06-11")
;;=> true
(gen/generate (s/gen ::mspecs/iso-local-date))
;;=> "2017-12-07"
Copyright 2025 Toshiki Takeuchi
Distributed under the MIT License.
Can you improve this documentation?Edit on GitHub
cljdoc is a website building & hosting documentation for Clojure/Script libraries
× close