diff --git a/env-resources/dev/site.config b/env-resources/dev/site.config new file mode 100644 index 0000000..18b9cae --- /dev/null +++ b/env-resources/dev/site.config @@ -0,0 +1,2 @@ +{:env "DEV" + :database {:url "http://couchdb:5984/"}} diff --git a/resources/site.config b/env-resources/prod/site.config similarity index 100% rename from resources/site.config rename to env-resources/prod/site.config diff --git a/project.clj b/project.clj index d8b391c..9f35812 100644 --- a/project.clj +++ b/project.clj @@ -25,10 +25,12 @@ :destroy blarg.handler/destroy} :profiles {:uberjar {:aot :all} - :production {:ring {:open-browser? false - :stacktraces? false - :auto-reload? false}} - :dev {:dependencies [[ring-mock "0.1.5"] - [ring/ring-devel "1.2.1"]] - :source-paths ["dev"]}} + :production {:ring {:open-browser? false + :stacktraces? false + :auto-reload? false} + :resource-paths ["env-resources/prod"]} + :dev {:dependencies [[ring-mock "0.1.5"] + [ring/ring-devel "1.2.1"]] + :source-paths ["dev"] + :resource-paths ["env-resources/dev"]}} :min-lein-version "2.0.0") diff --git a/src/blarg/handler.clj b/src/blarg/handler.clj index 9aeb51b..9118d7a 100644 --- a/src/blarg/handler.clj +++ b/src/blarg/handler.clj @@ -47,10 +47,10 @@ :params {:errorInfo e} :status 500))))) -(defonce routes (find-routes "blarg.routes." app-routes)) +(def routes (find-routes "blarg.routes." app-routes)) -(defonce app (app-handler - routes - :middleware [wrap-exceptions wrap-servlet-context-path] - :access-rules [{:redirect "/unauthorized" :rule auth-required}] - :formats [:json-kw :edn])) +(def app (app-handler + routes + :middleware [wrap-exceptions wrap-servlet-context-path] + :access-rules [{:redirect "/unauthorized" :rule auth-required}] + :formats [:json-kw :edn])) diff --git a/src/blarg/models/db.clj b/src/blarg/models/db.clj index 899193f..637757c 100644 --- a/src/blarg/models/db.clj +++ b/src/blarg/models/db.clj @@ -14,9 +14,24 @@ :password pass) (cemerick.url/url url db)))) -(def users (db-url "blarg_users")) -(def posts (db-url "blarg_posts")) -(def files (db-url "blarg_files")) +(defmacro with-db [url & body] + `(couch/with-db + ~url + ~@body)) + +(defn get-users-db [] + (db-url "blarg_users")) +(defn get-posts-db [] + (db-url "blarg_posts")) +(defn get-files-db [] + (db-url "blarg_files")) + +(defmacro with-users-db [& body] + `(with-db (get-users-db) ~@body)) +(defmacro with-posts-db [& body] + `(with-db (get-posts-db) ~@body)) +(defmacro with-files-db [& body] + `(with-db (get-files-db) ~@body)) (defmacro ->view-keys "returns a sequence of only the keys returned by running a view" @@ -48,8 +63,8 @@ "verifies that the required databases are present, creating them if they are not there (including the views)." [] - (couch/get-database users) - (when (couch/get-database files) - (touch-design-doc files "_design/files" "couchdb/design_docs/files.js")) - (when (couch/get-database posts) - (touch-design-doc posts "_design/posts" "couchdb/design_docs/posts.js"))) + (couch/get-database (get-users-db)) + (when (couch/get-database (get-files-db)) + (touch-design-doc (get-files-db) "_design/files" "couchdb/design_docs/files.js")) + (when (couch/get-database (get-posts-db)) + (touch-design-doc (get-posts-db) "_design/posts" "couchdb/design_docs/posts.js"))) diff --git a/src/blarg/models/files.clj b/src/blarg/models/files.clj index ddc3d99..3deda5b 100644 --- a/src/blarg/models/files.clj +++ b/src/blarg/models/files.clj @@ -7,7 +7,7 @@ (defn file-exists? [file] (let [f (ensure-prefix file "/")] - (couch/with-db files + (with-files-db (not (zero? (count (couch/get-view "files" "listPublished" {:key f}))))))) (defn get-file @@ -15,7 +15,7 @@ ([file allow-unpublished?] (let [f (ensure-prefix file "/") view-name (if allow-unpublished? "listAll" "listPublished")] - (couch/with-db files + (with-files-db (if-let [file-info (->first-view-value (couch/get-view "files" view-name {:key f}))] (let [id (:_id file-info) @@ -30,7 +30,7 @@ (defn list-files [path] (let [p (ensure-prefix-suffix path "/")] (if-let [file-list (->view-values - (couch/with-db files + (with-files-db (couch/get-view "files" "listAllByPath" {:key p})))] (map (fn [f] @@ -45,11 +45,11 @@ (defn get-tree [] (->view-keys - (couch/with-db files + (with-files-db (couch/get-view "files" "listPaths" {:group true})))) (defn add-file [path filename file content-type] - (couch/with-db files + (with-files-db (let [p (ensure-prefix-suffix path "/") id (str p filename)] (if-let [doc (couch/put-document {:_id id @@ -60,7 +60,7 @@ (couch/put-attachment doc file :filename filename :mime-type content-type))))) (defn update-file [id file content-type] - (couch/with-db files + (with-files-db (if-let [doc (couch/get-document id)] (let [filename (:filename doc) attachment (second (first (:_attachments doc)))] @@ -70,13 +70,13 @@ (defn delete-file [id] (let [safe-id (ensure-prefix id "/")] - (couch/with-db files + (with-files-db (if-let [doc (couch/get-document safe-id)] (couch/delete-document doc))))) (defn publish-file [id publish?] (let [safe-id (ensure-prefix id "/")] - (couch/with-db files + (with-files-db (if-let [doc (couch/get-document safe-id)] (couch/update-document (-> doc (assoc :last_modified_at (get-timestamp)) diff --git a/src/blarg/models/posts.clj b/src/blarg/models/posts.clj index 09e391b..bd538b9 100644 --- a/src/blarg/models/posts.clj +++ b/src/blarg/models/posts.clj @@ -48,19 +48,19 @@ (defn get-post [id] (merge-cached-post-md! (->single-post - (couch/with-db posts + (with-posts-db (couch/get-document id))))) (defn get-post-by-date-slug [date slug] (merge-cached-post-md! (->single-post - (couch/with-db posts + (with-posts-db (couch/get-view "posts" "listPostsBySlug" {:key [date, slug]}))))) (defn add-post [title body user tags] (merge-cached-post-md! (->single-post - (couch/with-db posts + (with-posts-db (couch/put-document {:title title :slug (->slug title) @@ -76,7 +76,7 @@ (if-let [post (get-post id)] (merge-cached-post-md! (->single-post - (couch/with-db posts + (with-posts-db (couch/update-document (-> (date->string post timestamp-fields) (merge (if title {:title title :slug (->slug title)})) @@ -89,7 +89,7 @@ (defn delete-post [id] (when-let [post (get-post id)] - (couch/with-db posts + (with-posts-db (couch/delete-document post)) (remove-cached-post! post) post)) @@ -99,7 +99,7 @@ (defn list-tags [] (->view-keys - (couch/with-db posts + (with-posts-db (couch/get-view "posts" "listTags" {:group true})))) (defn list-posts @@ -114,13 +114,13 @@ (map merge-cached-post-md! (->post-list - (couch/with-db posts + (with-posts-db (couch/get-view "posts" viewName params))))))) (defn list-posts-by-tag [unpublished? tag] (let [view-name (if unpublished? "listPostsByTag" "listPublishedPostsByTag")] (if-let [posts (->post-list - (couch/with-db posts + (with-posts-db (couch/get-view "posts" view-name {:key tag :descending true})))] ;TODO: look into couchdb partial key matching to do this sort at the DB @@ -129,7 +129,7 @@ (defn list-posts-archive [unpublished?] (let [view-name (if unpublished? "listPostsArchive" "listPublishedPostsArchive")] (if-let [posts (->post-list - (couch/with-db posts + (with-posts-db (couch/get-view "posts" view-name {:descending true})))] (map #(assoc % :mmyyyy (->nicer-month-year-str (:mmyyyy %))) @@ -138,7 +138,7 @@ (defn count-posts [unpublished?] (->first-view-value - (couch/with-db posts + (with-posts-db (couch/get-view "posts" (if unpublished? "countPosts" "countPublishedPosts") diff --git a/src/blarg/models/users.clj b/src/blarg/models/users.clj index fbfb722..446a3a8 100644 --- a/src/blarg/models/users.clj +++ b/src/blarg/models/users.clj @@ -6,7 +6,7 @@ (defn get-user ([id] - (couch/with-db users + (with-users-db (couch/get-document id))) ([id pass] (if-let [user (get-user id)] @@ -18,10 +18,10 @@ :password (crypt/encrypt pass) :email email :created_at (get-timestamp)}] - (couch/with-db users + (with-users-db (couch/put-document user)))) (defn delete-user [id] - (couch/with-db users + (with-users-db (if-let [user (get-user id)] (couch/delete-document user))))