Project page for Chillax: http://github.com/sykopomp/chillax
Chillax is a CouchDB abstraction layer for Common Lisp.
Chillax also includes a CouchDB view server, which can be used to write CouchDB views in full, native Common Lisp.
Chillax includes several systems:
chillax.asd - This is a 'DWIM' system. It uses Yason to parse/encode JSON data. If you don't know what you want, this is probably what you want.
- chillax.core.asd - Core API and protocols for servers, databases, documents, and design-docs.
- chillax.yason.asd - Implementation of the server protocol using Yason's JSON parser.
- chillax.utils.asd - Some handy utilities.
- chillax.view-server.asd - The Chillax view server. This only depends on chillax.utils.
- Lispy, thin abstraction over the CouchDB API. Chillax is not magical, but it tries to be convenient.
- Chillax's server and database protocols allow easy overriding and extension of core behavior. Writing your own server and database objects, or integrating existing ones is trivial (Server protocol is 8 generic functions, 5 of them simply readers. Database protocol is a mere 2 genfuns, both readers). You can even make Chillax use your favorite JSON library!
Native Lisp view server. No need to use parenscript! Write your views in Common Lisp. Include your own libraries for convenience. See this screenshot.
Chillax is Quicklisp-installable, allowing for super-quick, painless installation of Chillax and all its dependencies.
Make sure CouchDB is installed, and currently running. This example assumes that the server is running in localhost, using the default 5984 port. Yason's alist encoder/decoder is used below to make replies readable (by default, it uses hash tables as JSON objects, instead of alists).
CL-USER> (ql:quickload 'chillax) CL-USER> (in-package :chillax) CHILLAX> (defparameter *server* (make-instance 'yason-server :object-as-alist-p t :parse-object-key-fun (lambda (string) (intern string *package*)))) *SERVER* CHILLAX> (defparameter *db* (ensure-db *server* "test")) *DB* CHILLAX> (all-documents *db*) ((|rows|) (|offset| . 0) (|total_rows| . 0)) CHILLAX> (put-document *db* "my_test_doc" '((name . "Josh") (favorite-language . "common-lisp"))) ((|rev| . "1-3c964cc898c03c48903a91d90b24a269") (|id| . "my_test_doc") (|ok| . T)) CHILLAX> (get-document *db* "my_test_doc") ((FAVORITE-LANGUAGE . "common-lisp") (NAME . "Josh") (|_rev| . "1-3c964cc898c03c48903a91d90b24a269") (|_id| . "my_test_doc")) CHILLAX> (delete-document *db* (cdr (assoc '|_id| *)) (cdr (assoc '|_rev| *))) ((|rev| . "2-2221fc2b97c1fac1a82ba07d2835ac80") (|id| . "my_test_doc") (|ok| . T))
By implementing a couple of generic functions, you can hook your own JSON encoding/decoding mechanism into Chillax -- including encoding and decoding instances of your own classes. The protocol for doing so is very straightforward and well-documented.
Chillax is licensed under the MIT license. For API documentation and more details, please visit the project page.