From 12d4643d04109de71b74e540aa88d21f5ed8156e Mon Sep 17 00:00:00 2001 From: Johan Sjolen Date: Tue, 23 May 2017 13:22:55 +0200 Subject: [PATCH] Added in the changes proposed by PuercoPop. Moved the condition to utils.lisp, added a base condition and moved error signalling to :initform --- coleslaw.asd | 1 - plugins/static-pages.lisp | 20 ++++++++++---------- src/errors.lisp | 8 -------- src/packages.lisp | 7 ++++++- src/util.lisp | 10 ++++++++++ 5 files changed, 26 insertions(+), 20 deletions(-) delete mode 100644 src/errors.lisp diff --git a/coleslaw.asd b/coleslaw.asd index 68aab36..4dc4579 100644 --- a/coleslaw.asd +++ b/coleslaw.asd @@ -21,7 +21,6 @@ :serial t :components ((:file "packages") (:file "util") - (:file "errors") (:file "config") (:file "themes") (:file "documents") diff --git a/plugins/static-pages.lisp b/plugins/static-pages.lisp index d18e143..b9ec62e 100644 --- a/plugins/static-pages.lisp +++ b/plugins/static-pages.lisp @@ -13,21 +13,21 @@ (in-package :coleslaw-static-pages) (defclass page (content) - ((title :initarg :title :reader coleslaw::title-of) + ((title :initarg :title :reader coleslaw::title-of + :initform + (error 'coleslaw::required-field-missing :message (format nil "Required field title is missing from static-page"))) (format :initarg :format :reader coleslaw::page-format)) ;; default format is markdown (for backward compatibility) (:default-initargs :format :md)) -(defmethod initialize-instance :after ((object page) &key url title) - (cond - ((null url) - (error 'coleslaw::required-field-missing :message (format nil "URL field is missing from static page ~A" (coleslaw::content-file object)))) - ((null title) - (error 'coleslaw::required-field-missing :message (format nil "Title field is missing from static page ~A" (coleslaw::content-file object))))) +(defmethod initialize-instance :after ((object page) &key) (with-slots (coleslaw::url coleslaw::text format title) object - (setf coleslaw::url (make-pathname :defaults coleslaw::url) - format (alexandria:make-keyword (string-upcase format)) - coleslaw::text (render-text coleslaw::text format)))) + (if (not (boundp coleslaw::url)) + (error 'coleslaw::required-field-missing + :message (format nil "Required field URL is missing")) + (setf coleslaw::url (make-pathname :defaults coleslaw::url) + format (alexandria:make-keyword (string-upcase format)) + coleslaw::text (render-text coleslaw::text format))))) (defmethod render ((object page) &key next prev) ;; For the time being, we'll re-use the normal post theme. diff --git a/src/errors.lisp b/src/errors.lisp deleted file mode 100644 index 1a9c620..0000000 --- a/src/errors.lisp +++ /dev/null @@ -1,8 +0,0 @@ -(in-package :coleslaw) - -(define-condition required-field-missing (error) - ((message :accessor required-field-missing-message :initarg :message)) - (:report - (lambda (c s) - (format s (required-field-missing-message - c))))) diff --git a/src/packages.lisp b/src/packages.lisp index d49035f..d6b7d6e 100644 --- a/src/packages.lisp +++ b/src/packages.lisp @@ -46,4 +46,9 @@ #:add-document #:delete-document #:write-document - #:content-text)) + #:content-text + + ;; Conditions + coleslaw-condition + required-field-missing + )) diff --git a/src/util.lisp b/src/util.lisp index 250d195..5adb8e7 100644 --- a/src/util.lisp +++ b/src/util.lisp @@ -1,5 +1,15 @@ (in-package :coleslaw) + +(define-condition coleslaw-condition () ()) +(define-condition required-field-missing (error coleslaw-condition) + ((message :accessor required-field-missing-message :initarg :message)) + (:report + (lambda (c s) + (format s (required-field-missing-message + c))))) + + (defun construct (class-name args) "Create an instance of CLASS-NAME with the given ARGS." (apply 'make-instance class-name args))