This commit was merged in pull request #27.
This commit is contained in:
@@ -45,29 +45,35 @@
|
||||
(and (fs/exists? x) x))
|
||||
(fs/split-paths (System/getenv "XDG_DATA_DIRS"))))
|
||||
|
||||
(defn make-read-config [spec]
|
||||
(fn [& files]
|
||||
(let [r (->> files
|
||||
(filter identity)
|
||||
(map aero/read-config)
|
||||
(apply merge))
|
||||
conformed (s/conform spec r)]
|
||||
(if-not (s/invalid? conformed)
|
||||
conformed
|
||||
(throw (IllegalArgumentException.
|
||||
"bad config"
|
||||
(ex-info "couldn't conform"
|
||||
(s/explain-data spec r))))))))
|
||||
(defmethod aero/reader 'file
|
||||
[{:keys [source]} tag value]
|
||||
"Aero tag to reference a `java.io.File` relative to the config
|
||||
file."
|
||||
(-> (aero/relative-resolver source value)
|
||||
fs/file))
|
||||
|
||||
(def read-config (make-read-config ::d/config))
|
||||
(defn read-config [spec files & {:as opts}]
|
||||
(let [r (->> files
|
||||
(filter identity)
|
||||
(map #(aero/read-config % opts))
|
||||
(apply merge))
|
||||
conformed (s/conform spec r)]
|
||||
(if-not (s/invalid? conformed)
|
||||
conformed
|
||||
(throw (ex-info "Failed to conform config"
|
||||
(s/explain-data spec r))))))
|
||||
|
||||
(def default
|
||||
(read-config
|
||||
;; Default config.
|
||||
(defn load-config! [var spec files & {:as opts}]
|
||||
(alter-var-root var (constantly (read-config spec files opts))))
|
||||
|
||||
(def sources
|
||||
[;; Default config.
|
||||
(io/resource "net/deertopia/doerg/default-config.edn")
|
||||
;; Defaults set at build time, if any.
|
||||
(io/resource "net/deertopia/doerg/extra-config.edn")
|
||||
;; Config set at runtime.
|
||||
(System/getenv "DOERG_CONFIG")))
|
||||
(System/getenv "DOERG_CONFIG")])
|
||||
|
||||
(def default (read-config ::d/config sources))
|
||||
|
||||
(def ^:dynamic *cfg* default)
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
[:meta {:charset "utf-8"}])
|
||||
|
||||
(defn external-stylesheet [href]
|
||||
[:link {:rel "stylesheet" :type "text/css" :href href}])
|
||||
[:link {:rel "stylesheet" :type "text/css" :href (str "/resource/" href)}])
|
||||
|
||||
(def ibm-plex
|
||||
(concat
|
||||
|
||||
@@ -179,7 +179,7 @@
|
||||
|
||||
|
||||
|
||||
(defn- render-pprint
|
||||
(defn render-pprint
|
||||
"Render the argument inline as `clojure.pprint/pprint` output."
|
||||
[x & {:keys [text]
|
||||
:or {text "debug!"}}]
|
||||
|
||||
@@ -31,17 +31,17 @@
|
||||
(defn render-html [& {:keys [src dest]
|
||||
:or {src some-org-file
|
||||
dest "/tmp/doerg-test"}}]
|
||||
(fs/create-dirs dest)
|
||||
(force-create-sym-link (fs/file dest "ibm-plex-web")
|
||||
(-> cfg/*cfg* ::doerg/ibm-plex-web))
|
||||
(force-create-sym-link (fs/file dest "deerstar.css")
|
||||
(io/resource "net/deertopia/doerg/deerstar.css"))
|
||||
(force-create-sym-link (fs/file dest "tuftesque.css")
|
||||
(io/resource "net/deertopia/doerg/tuftesque.css"))
|
||||
(force-create-sym-link (fs/file dest "Temml-Plex.css")
|
||||
(io/resource "net/deertopia/doerg/Temml-Plex.css"))
|
||||
(fs/delete-if-exists (fs/file dest "index.html"))
|
||||
(->> src render/to-html str (spit (fs/file dest "index.html"))))
|
||||
(let [resource-dir (fs/file dest "resource")]
|
||||
(fs/create-dirs dest)
|
||||
(fs/create-dirs resource-dir)
|
||||
(force-create-sym-link (fs/file resource-dir "ibm-plex-web")
|
||||
(-> cfg/*cfg* ::doerg/ibm-plex-web))
|
||||
(doseq [x #{"Temml-Plex.css" "tuftesque.css" "deerstar.css"}]
|
||||
(force-create-sym-link
|
||||
(fs/file resource-dir x)
|
||||
(io/resource (str "net/deertopia/doerg/" x))))
|
||||
(fs/delete-if-exists (fs/file dest "index.html"))
|
||||
(->> src render/to-html str (spit (fs/file dest "index.html")))))
|
||||
|
||||
(defn render-edn [& {:keys [src dest]
|
||||
:or {src some-org-file
|
||||
|
||||
Reference in New Issue
Block a user