Refactor survey class
This commit is contained in:
parent
7bda4dd0fa
commit
209a6e1fed
3 changed files with 24 additions and 14 deletions
|
@ -2,7 +2,7 @@
|
|||
|
||||
(defsystem "dev.metalisp.survey"
|
||||
:description "Create questionnaires and analyze the results."
|
||||
:version "0.5.29"
|
||||
:version "0.5.30"
|
||||
:author "Marcus Kammer <marcus.kammer@mailbox.org>"
|
||||
:source-control (:git "https://code.metalisp.dev/marcuskammer/dev.metalisp.survey.git")
|
||||
:licence "MIT"
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
;;; -*- mode: lisp; coding: utf-8; -*-
|
||||
(defpackage :ml-survey/models
|
||||
(:use #:cl)
|
||||
(:export #:survey-id
|
||||
#:survey-id-p
|
||||
(:export #:survey-uid
|
||||
#:survey-uid-p
|
||||
#:survey
|
||||
#:survey-data-dir
|
||||
#:survey-data-dir-files
|
||||
|
|
|
@ -2,18 +2,28 @@
|
|||
(in-package :ml-survey/models)
|
||||
|
||||
(defclass survey ()
|
||||
((id :initarg :id :reader survey-id)
|
||||
(data-dir :initarg :data-dir :reader survey-data-dir)
|
||||
(properties :initarg :properties :reader survey-properties)))
|
||||
((uid :initarg :uid
|
||||
:reader survey-uid
|
||||
:type integer
|
||||
:documentation "Unique ID.")
|
||||
(data-dir :initarg :data-dir
|
||||
:reader survey-data-dir
|
||||
:type pathname
|
||||
:documentation "The directory where questionnaires are saved.")
|
||||
(properties :initarg :properties
|
||||
:reader survey-properties
|
||||
:type list
|
||||
:documentation "Properties as title and description."))
|
||||
(:documentation "Represents a survey."))
|
||||
|
||||
(defmethod initialize-instance :after ((survey survey) &key)
|
||||
(with-slots (id data-dir properties) survey
|
||||
(when (not (integerp id))
|
||||
(setf id (handler-case (parse-integer id) (error () nil))))
|
||||
(with-slots (uid data-dir properties) survey
|
||||
(when (not (integerp uid))
|
||||
(setf uid (handler-case (parse-integer uid) (error () nil))))
|
||||
(setf data-dir (uiop:merge-pathnames*
|
||||
(format nil "~a/" id)
|
||||
(format nil "~a/" uid)
|
||||
(ml-survey/fileops:ensure-surveys-dir)))
|
||||
(setf properties (first (rest (assoc id (ml-survey/fileops:surveys-db)))))))
|
||||
(setf properties (first (rest (assoc uid (ml-survey/fileops:surveys-db)))))))
|
||||
|
||||
(defgeneric survey-id-p (survey)
|
||||
(:documentation "Check if the survey ID is present in the surveys database."))
|
||||
|
@ -30,7 +40,7 @@
|
|||
(defgeneric survey-properties-description (survey)
|
||||
(:documentation "Get description property."))
|
||||
|
||||
(defmethod survey-id-p ((survey survey))
|
||||
(defmethod survey-uid-p ((survey survey))
|
||||
(let ((ids (mapcar #'first (ml-survey/fileops:surveys-db))))
|
||||
(if (member (survey-id survey)) ids) t nil))
|
||||
|
||||
|
@ -58,7 +68,7 @@ MAKE-FN: Function which is applied to the questionnaire data structure. Can be u
|
|||
files)))
|
||||
|
||||
(defun build-questionnaire-link (survey-id resource)
|
||||
(format nil "/questionnaire/~a~a" survey-id resource))
|
||||
(format nil "/questionnaire/~a~a" survey-uid resource))
|
||||
|
||||
(defmethod survey-html ((survey survey))
|
||||
(spinneret:with-html
|
||||
|
@ -67,6 +77,6 @@ MAKE-FN: Function which is applied to the questionnaire data structure. Can be u
|
|||
for value = (cdr property) do
|
||||
(:dt key)
|
||||
(cond ((string= key "questionnaire")
|
||||
(:dd (:a :href (build-questionnaire-link (survey-id survey) value)
|
||||
(:dd (:a :href (build-questionnaire-link (survey-uid survey) value)
|
||||
(format nil "Open Questionnaire ~a" value))))
|
||||
(t (:dd value)))))))
|
||||
|
|
Loading…
Add table
Reference in a new issue