A website built in Common Lisp using Caveman2 as its framework. It is based on a collection of tutorials written by hyotang666. Those tutorials are based on chapters from the book 'Basic Ruby on Rails'. hyotang666 ported the Ruby code to Common Lisp.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

107 lines
3.0 KiB

;;(in-package #:cl-user) ; Not sure if this needs to exist (Chapter 4)
(defpackage rails-to-caveman.model
(:use #:cl
#:rails-to-caveman.db
#:mito))
(in-package #:rails-to-caveman.model)
;;; Defines the USER table class for the database.
;;; Will be used by mito (an ORM).
(defclass user ()
((number
:col-type
:integer
:initarg
:number
:reader number-of)
(name :col-type (:varchar 64)
:initarg
:name
:reader name-of)
(full-name :col-type
(or (:varchar 128) :null)
:initarg
:full-name
:reader full-name-of)
(email :col-type
(or :null :text)
:initarg
:email
:accessor email-of)
(birthday :col-type
(or :null :date)
:initarg
:birthday
:reader birthday-of)
(sex :col-type
:integer
:initarg
:sex
:initform 1
:reader sex-of)
#| CHANGED :ACCESSOR VALUE FROM TUTORIAL (CHAPTER 4)
===================================================
The Chapter 4 tutorial has the :accessor value set to
'administratorp'. Unfortunately, this causes initialisation
argument errors when trying to seed the database. To fix this, I
had to remove the 'p' part from that line. At the time of
writing, I do not know if that will have a negative effect on
future tutorials.
I have left a note in the 'seeds' function below highlighting the
change to the :accessor value.
|#
(administrator :col-type
:boolean
:initarg
:administrator
:initform nil
:accessor administrator))
(:metaclass mito:dao-table-class))
(defun seeds()
;; '#(' are ARRAY LITERALS. I keep forgetting this and need to look
;; it up.
(let ((names
#("Taro" "Jiro" "Hana" "John" "Mike" "Sophy" "Bill" "Alex" "Mary" "Tom"))
(fnames ; First Names
#("Hippo" "Darling" "Lopez" "Jerry"))
(gnames ; Given Names
#("Orange" "Fox" "Snake")))
(with-connection (db)
(dotimes (x 10)
(mito:create-dao 'user
:number (+ x 10)
:name (aref names x)
:full-name (format nil "~A ~A"
(aref fnames (rem x 4))
(aref gnames (rem x 3)))
:email (format nil "~A@example.com" (aref names x))
:birthday "1981-12-01"
:sex (nth (rem x 3) '(1 1 2))
;; Removed 'p' from end of :administrator --
;; so the code differs from the code in the
;; tutorial (Chapter 4). I had to change it
;; because it produced errors when trying to
;; seed the database (using 'seeds'
;; function. I have, also, left a note in the
;; 'user' class definition highlighting this.
:administrator (zerop 0))))))
(defun rebuild ()
"Drops the current database table, recreates it and populates it using seeded data."
(with-connection (db)
(mito:recreate-table 'user))
(seeds))
(defun ids ()
"Produces a list of all the Id's in the database. Part of Chapter 4
tutorial and is a port of the 'ids method' in the Ruby on Rails book
this tutorial was translated/ported from."
(rails-to-caveman.db:with-connection (rails-to-caveman.db:db)
(mapcar #'mito:object-id
(mito:retrieve-dao 'rails-to-caveman.model::user))))