Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/mmontone/clavier
:heavy_check_mark: General purpose validation library for Common Lisp
https://github.com/mmontone/clavier
common-lisp lisp utilities validation
Last synced: 2 months ago
JSON representation
:heavy_check_mark: General purpose validation library for Common Lisp
- Host: GitHub
- URL: https://github.com/mmontone/clavier
- Owner: mmontone
- License: mit
- Created: 2014-04-26T03:41:05.000Z (about 10 years ago)
- Default Branch: master
- Last Pushed: 2024-02-27T21:24:29.000Z (4 months ago)
- Last Synced: 2024-02-28T13:58:39.560Z (4 months ago)
- Topics: common-lisp, lisp, utilities, validation
- Language: Common Lisp
- Homepage:
- Size: 43 KB
- Stars: 17
- Watchers: 5
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Lists
- awesome-cl - clavier - General purpose validation library for Common Lisp. [MIT][200]. (Apps ## / Third-party APIs)
- curated-awesome-cl - clavier - General purpose validation library for Common Lisp. [MIT][200]. (Python ##)
README
Clavier
----------[![Quicklisp](http://quickdocs.org/badge/clavier.svg)](http://quickdocs.org/clavier/)
[![MIT License](https://img.shields.io/badge/license-MIT-blue.svg)](./LICENSE)*Clavier* is a general purpose validation library for Common Lisp.
Install
-------Through Quicklisp:
```lisp
(ql:quickload :clavier)
```
Getting started
---------------Validators are class instances that validate the arguments passed to the `validate` function:
```lisp
(let ((validator (make-instance 'equal-to-validator :object 22)))
(validate validator 22 :error-p t))
;=> T
```If the validator succeeds, the validate function returns `T`. If it fails, the validate function either signals a validation error, or returns `NIL` and a validation message depending on the value of the `:error-p` argument.
```lisp
(let ((validator (make-instance 'equal-to-validator :object 22)))
(validate validator 33 :error-p nil))
;=>
;NIL
;"33 is not equal to 22"
```Validators are implemented as funcallable classes. So, alternatively to using the `validate` function, it is possible to just funcall the validator, like this:
```lisp
(let ((validator (make-instance 'equal-to-validator :object 22)))
(funcall validator 22 :error-p t))
;=> T
```## Validation expressions
It is possible to create validators with a more convenient syntax. Each validator provides a builder function. For instance, and equal-to-validator can be built like this:
```lisp
(funcall (== 100) 100) ;=> T
(funcall (== 100) 99) ;=> NIL
```## Validators composition
This allows to compose validators, using `==`, `~=`, `&&`, `||` as the composition operands:
```lisp
(let ((validator (|| (&& (greater-than 20)
(less-than 30))
(|| (&& (greater-than 1)
(less-than 10))
(== 100)))))
(funcall validator 5))
```## Validators messages
Validators messages to be used when validation fails can be customized passing an `:message` argument when building the validator
## Catching and collecting validation errors
Validation errors can controlled globally by setting the dynamic variable `*signal-validation-errors*`, which is `NIL` by default (no validation errors are signaled by default).
There's also the `with-signal-validation-errors` macro to specify whether validation errors should be signaled or not in a dynamic extent. For instance, this code signals a validation error:
```lisp
(let ((validator (make-instance 'equal-to-validator :object 22)))
(with-signal-validation-errors (t)
(validate validator 33)))
```Use the `collecting-validation-errors` macro to collect validation errors happening in a dynamic extent:
```lisp
(let ((validator (make-instance 'equal-to-validator :object 22)))
(collecting-validation-errors (errors found-p)
(progn
(funcall validator 33 :error-p t)
(funcall validator 44 :error-p t))
(print errors)
(print found-p)))
;=>
;(#
; #)
;T
```## Validators list:
* equal-to-validator
* not-equal-to-validator
* blank-validator
* not-blank-validator
* true-validator
* false-validator
* type-validator
* string-validator
* boolean-validator
* integer-validator
* symbol-validator
* keyword-validator
* function-validator
* email-validator
* regex-validator
* url-validator
* not-validator
* and-validator
* or-validator
* one-of-validator
* less-than-validator
* greater-than-validator
* length-validator