From b2d9fc0d70b948a0263878af567924b4a40d2d2e Mon Sep 17 00:00:00 2001 From: gered Date: Sat, 29 Mar 2014 09:50:28 -0400 Subject: [PATCH] force cache updates when adding/updating, force remove when deleting --- src/blarg/models/posts.clj | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/src/blarg/models/posts.clj b/src/blarg/models/posts.clj index 8bfb0dc..09e391b 100644 --- a/src/blarg/models/posts.clj +++ b/src/blarg/models/posts.clj @@ -11,22 +11,26 @@ (defonce post-md-cache (atom {})) -(defn- cache-post! [{:keys [_id created_at body] :as post}] +(defn- cache-post! [{:keys [_id created_at body] :as post} & [force-cache-update?]] (let [cached-post (get @post-md-cache _id)] (if (or (not cached-post) - (after? created_at (:created_at cached-post))) + (after? created_at (:created_at cached-post)) + force-cache-update?) (do (swap! post-md-cache assoc _id {:created_at created_at :html_body (md->html body)}) (get @post-md-cache _id)) cached-post))) -(defn- merge-cached-post-md! [post] - (let [cached-post (cache-post! post)] +(defn- merge-cached-post-md! [post & [force-cache-update?]] + (let [cached-post (cache-post! post force-cache-update?)] (merge post (select-keys cached-post [:html_body])))) +(defn- remove-cached-post! [{:keys [_id] :as post}] + (swap! post-md-cache dissoc _id)) + (defmacro ->post-list [& body] `(string->date (->view-values @@ -65,7 +69,8 @@ :tags tags :created_at (get-timestamp) :published false - :type "post"}))))) + :type "post"}))) + true)) (defn update-post [id title body user tags published? reset-date?] (if-let [post (get-post id)] @@ -79,12 +84,15 @@ (merge (if user {:user user})) (merge (if tags {:tags tags})) (merge (if-not (nil? published?) {:published published?})) - (merge (if reset-date? {:created_at (get-timestamp)}))))))))) + (merge (if reset-date? {:created_at (get-timestamp)})))))) + true))) (defn delete-post [id] - (if-let [post (get-post id)] + (when-let [post (get-post id)] (couch/with-db posts - (couch/delete-document post)))) + (couch/delete-document post)) + (remove-cached-post! post) + post)) (defn publish-post [id publish? reset-date?] (update-post id nil nil nil nil publish? reset-date?))