From d0059ed69e069fd6f6da1f10b8c9d0f0bebe335f Mon Sep 17 00:00:00 2001 From: Brit Butler Date: Tue, 15 Apr 2014 16:46:04 -0400 Subject: [PATCH] Miscellaneous fixes. --- src/indexes.lisp | 5 ++--- src/posts.lisp | 2 +- src/util.lisp | 11 +++++++---- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/indexes.lisp b/src/indexes.lisp index e5785b5..3fe32f0 100644 --- a/src/indexes.lisp +++ b/src/indexes.lisp @@ -105,7 +105,6 @@ (dolist (feed (find-all 'feed)) (render-feed feed))) -;; TODO: tag-feed isn't reached by do-subclasses! (defclass tag-feed (feed) ()) (defmethod page-url ((object tag-feed)) @@ -130,12 +129,12 @@ (defun all-months () "Retrieve a list of all months with published content." (let ((months (mapcar (lambda (x) (subseq (content-date x) 0 7)) - (hash-table-values *content*)))) + (find-all 'post)))) (sort (remove-duplicates months :test #'string=) #'string>))) (defun all-tags () "Retrieve a list of all tags used in content." - (let* ((dupes (mappend #'content-tags (hash-table-values *content*))) + (let* ((dupes (mappend #'content-tags (find-all 'post))) (tags (remove-duplicates dupes :test #'string= :key #'tag-slug))) (sort tags #'string< :key #'tag-name))) diff --git a/src/posts.lisp b/src/posts.lisp index 62ef073..2c8f3d3 100644 --- a/src/posts.lisp +++ b/src/posts.lisp @@ -22,7 +22,7 @@ :next next))) (defmethod page-url ((object post)) - (format nil "~a/~a" (posts-dir *config*) (content-slug object))) + (format nil "posts/~a" (content-slug object))) (defmethod publish ((doc-type (eql (find-class 'post)))) (loop for (next post prev) on (append '(nil) (by-date (find-all 'post))) diff --git a/src/util.lisp b/src/util.lisp index 3c6bf3d..05710d7 100644 --- a/src/util.lisp +++ b/src/util.lisp @@ -7,10 +7,13 @@ (defmacro do-subclasses ((var class) &body body) "Iterate over the subclasses of CLASS performing BODY with VAR lexically bound to the current subclass' class-name." - (alexandria:with-gensyms (klass klasses) - `(let* ((,klass (if (typep ,class 'class) ,class (find-class ',class))) - (,klasses (closer-mop:class-direct-subclasses ,klass))) - (loop for ,var in ,klasses do ,@body)))) + (alexandria:with-gensyms (klasses all-subclasses) + `(labels ((,all-subclasses (class) + (let ((subclasses (closer-mop:class-direct-subclasses class))) + (append subclasses (loop for subclass in subclasses + nconc (,all-subclasses subclass)))))) + (let ((,klasses (,all-subclasses (find-class ',class)))) + (loop for ,var in ,klasses do ,@body))))) (defun fmt (fmt-str args) "A convenient FORMAT interface for string building."