This commit is contained in:
@@ -20,5 +20,6 @@
|
|||||||
(when (or (not *use-cache?*) stale?)
|
(when (or (not *use-cache?*) stale?)
|
||||||
(let [r (compute)]
|
(let [r (compute)]
|
||||||
(assert (string? r))
|
(assert (string? r))
|
||||||
|
(fs/create-dirs (fs/parent file))
|
||||||
(spit file r)))
|
(spit file r)))
|
||||||
file)
|
file)
|
||||||
|
|||||||
@@ -24,6 +24,8 @@
|
|||||||
[babashka.fs :as fs]
|
[babashka.fs :as fs]
|
||||||
[aero.core :as aero]))
|
[aero.core :as aero]))
|
||||||
|
|
||||||
|
(def ^:const html-dir (-> cfg/*cfg* ::publisher/state-directory))
|
||||||
|
|
||||||
|
|
||||||
;;; Routes
|
;;; Routes
|
||||||
|
|
||||||
@@ -42,11 +44,35 @@
|
|||||||
response/response
|
response/response
|
||||||
(response/content-type "text/html")))
|
(response/content-type "text/html")))
|
||||||
|
|
||||||
(defn node-by-slug [{{{:keys [slug]} :path} :parameters}]
|
(defn- html-dir []
|
||||||
(let [html (-> slug slug/from-string roam/get-node
|
(-> cfg/*cfg* ::publisher/state-directory (fs/file "html")))
|
||||||
roam/org-file doerg-render/to-html)]
|
|
||||||
(-> html response/response
|
(defn not-found [req]
|
||||||
(response/content-type "text/html"))))
|
(response/not-found "not found"))
|
||||||
|
|
||||||
|
(defn org-file->html-file [org-file]
|
||||||
|
(fs/file (html-dir)
|
||||||
|
(-> org-file
|
||||||
|
fs/file-name
|
||||||
|
(fs/strip-ext {:ext "org"})
|
||||||
|
(str ".html"))))
|
||||||
|
|
||||||
|
(defn node-by-slug [{{:keys [slug]} :path-params :as req}]
|
||||||
|
(if-some [node (some-> slug slug/from-string roam/get-node)]
|
||||||
|
(let [org-file (roam/org-file node)
|
||||||
|
html-file (org-file->html-file org-file)]
|
||||||
|
(cached-file/cached-file
|
||||||
|
:file html-file
|
||||||
|
:stale? (cached-file/newer-than? org-file html-file)
|
||||||
|
:compute #(doerg-render/to-html org-file))
|
||||||
|
(-> (str html-file)
|
||||||
|
response/file-response
|
||||||
|
(response/content-type "text/html")))
|
||||||
|
(not-found req))
|
||||||
|
#_(let [html (-> slug slug/from-string roam/get-node
|
||||||
|
roam/org-file doerg-render/to-html)]
|
||||||
|
(-> html response/response
|
||||||
|
(response/content-type "text/html"))))
|
||||||
|
|
||||||
(defn node-by-id [req]
|
(defn node-by-id [req]
|
||||||
(hello req))
|
(hello req))
|
||||||
@@ -64,9 +90,7 @@
|
|||||||
(reitit.ring/router
|
(reitit.ring/router
|
||||||
#{["/" {:get hello}]
|
#{["/" {:get hello}]
|
||||||
["/n/:slug"
|
["/n/:slug"
|
||||||
{:get {:handler #'node-by-slug
|
{:get {:handler #'node-by-slug}}]
|
||||||
:parameters
|
|
||||||
{:path {:slug ::slug/slug}}}}]
|
|
||||||
["/id/:id" {:get #'node-by-id}]}
|
["/id/:id" {:get #'node-by-id}]}
|
||||||
{:validate reitit.spec/validate
|
{:validate reitit.spec/validate
|
||||||
:exception reitit.dev.pretty/exception
|
:exception reitit.dev.pretty/exception
|
||||||
|
|||||||
@@ -3,22 +3,28 @@
|
|||||||
[reitit.ring]
|
[reitit.ring]
|
||||||
[clojure.test :as t]
|
[clojure.test :as t]
|
||||||
[clojure.set :as set]
|
[clojure.set :as set]
|
||||||
[net.deertopia.publisher.server :as server]
|
|
||||||
[net.deertopia.publisher.config :as cfg]
|
[net.deertopia.publisher.config :as cfg]
|
||||||
[net.deertopia.publisher :as-alias publisher]))
|
[net.deertopia.publisher :as-alias publisher]))
|
||||||
|
|
||||||
(t/deftest server-is-running
|
(t/deftest server-is-running
|
||||||
;; 서버가 벌써 시작한 다음에 이 테스트 하면 잘못됩니다.
|
;; 서버가 벌써 시작한 다음에 이 테스트 하면 잘못됩니다.
|
||||||
(assert (not= :running (server/status)))
|
(assert (not= :running (sut/status)))
|
||||||
(server/start!)
|
(sut/start!)
|
||||||
(t/is (= :running (server/status)))
|
(t/is (= :running (sut/status)))
|
||||||
(server/stop!))
|
(sut/stop!))
|
||||||
|
|
||||||
(t/deftest can-get-real-server-root
|
(t/deftest can-get-real-server-root
|
||||||
;; 서버가 벌써 시작한 다음에 이 테스트 하면 잘못됩니다.
|
;; 서버가 벌써 시작한 다음에 이 테스트 하면 잘못됩니다.
|
||||||
(assert (not= :running (server/status)))
|
(assert (not= :running (sut/status)))
|
||||||
(server/start!)
|
(sut/start!)
|
||||||
(t/is (->> (format "http://localhost:%d" (::publisher/port cfg/*cfg*))
|
(t/is (->> (format "http://localhost:%d" (::publisher/port cfg/*cfg*))
|
||||||
slurp
|
slurp
|
||||||
string?))
|
string?))
|
||||||
(server/stop!))
|
(sut/stop!))
|
||||||
|
|
||||||
|
#_
|
||||||
|
(t/deftest get-nonexistent-node
|
||||||
|
(t/is (= 404
|
||||||
|
(-> {:request-method :get
|
||||||
|
:uri "/n/68XqhHerTWCbE--RYLEdHw"}
|
||||||
|
sut/app :status))))
|
||||||
|
|||||||
Reference in New Issue
Block a user