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
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)))) |
|
|
|
|