From a25a04092eb080e5ad0c9f9e3fc8b4caa5eb8f86 Mon Sep 17 00:00:00 2001 From: jem Date: Tue, 18 Feb 2020 19:58:55 +0100 Subject: [PATCH] refactor path --- src/cryogen_core/classpath_able_io.clj | 14 +---- src/cryogen_core/compiler.clj | 56 ++++++++++---------- src/cryogen_core/io.clj | 15 ++---- src/cryogen_core/new_io.clj | 16 ++++-- src/cryogen_core/rss.clj | 3 +- test/cryogen_core/classpath_able_io_test.clj | 4 +- test/cryogen_core/new_io_test.clj | 4 +- 7 files changed, 52 insertions(+), 60 deletions(-) diff --git a/src/cryogen_core/classpath_able_io.clj b/src/cryogen_core/classpath_able_io.clj index 0456457..03617de 100644 --- a/src/cryogen_core/classpath_able_io.clj +++ b/src/cryogen_core/classpath_able_io.clj @@ -7,8 +7,7 @@ ; You must not remove this notice, or any other, from this software. (ns cryogen-core.classpath-able-io - (:require [clojure.string :as st] - [cryogen-core.classpath-able-io.fs :as fs] + (:require [cryogen-core.classpath-able-io.fs :as fs] [cryogen-core.classpath-able-io.cp :as cp] [cryogen-core.classpath-able-io.this :as this] [schema.core :as s]) @@ -26,15 +25,6 @@ [ignore-patterns source-list] (filter #(not (re-matches ignore-patterns %)) source-list)) -; TODO replace this fn ? -(defn path - "Creates path from given parts, ignore empty elements" - [& path-parts] - (->> path-parts - (remove st/blank?) - (st/join "/") - (#(st/replace % #"/+" "/")))) - (defn resource-from-cp-or-fs ;:- Resource [fs-prefix ;:- Prefix base-path ;:- VirtualPath @@ -102,7 +92,7 @@ :from-fs from-fs))) ; TODO: Add files to keep - (s/defn delete-resource-recursive! + (s/defn delete-resources! [virtual-path :- s/Str] (let [resource-paths (reverse diff --git a/src/cryogen_core/compiler.clj b/src/cryogen_core/compiler.clj index 0740a2a..fcad0a8 100644 --- a/src/cryogen_core/compiler.clj +++ b/src/cryogen_core/compiler.clj @@ -45,13 +45,13 @@ at the templates directory." [root mu ignored-files] (let [assets (cryogen-io/find-assets - (cryogen-io/path "templates" (m/dir mu) root) + (new-io/path "templates" (m/dir mu) root) (m/ext mu) ignored-files)] (if (seq assets) assets (cryogen-io/find-assets - (cryogen-io/path "templates" root) + (new-io/path "templates" root) (m/ext mu) ignored-files)))) @@ -79,7 +79,7 @@ :as params}] (let [page-uri (get params uri-type) uri-end (if clean-urls? (s/replace file-name #"(index)?\.html" "/") file-name)] - (cryogen-io/path "/" blog-prefix page-uri uri-end)))) + (new-io/path "/" blog-prefix page-uri uri-end)))) (defn read-page-meta "Returns the clojure map from the top of a markdown page/post" @@ -233,7 +233,7 @@ "When `clean-urls?` is set, appends `/index.html` before spit; otherwise just spits." [file-uri {:keys [clean-urls?]} data] (if clean-urls? - (cryogen-io/create-file-recursive (cryogen-io/path file-uri "index.html") data) + (cryogen-io/create-file-recursive (new-io/path file-uri "index.html") data) (cryogen-io/create-file file-uri data))) (defn- print-debug-info [data] @@ -246,7 +246,7 @@ :as params} pages] (when-not (empty? pages) (println (blue "compiling pages")) - ;(cryogen-io/create-folder (cryogen-io/path "/" blog-prefix page-root-uri)) + ;(cryogen-io/create-folder (new-io/path "/" blog-prefix page-root-uri)) (doseq [{:keys [uri] :as page} pages] (println "-->" (cyan uri)) @@ -258,7 +258,7 @@ (merge params {:active-page "pages" :home false - :servlet-context (cryogen-io/path "/" blog-prefix "/") + :servlet-context (new-io/path "/" blog-prefix "/") :page page :uri uri}))) (compile-pages params (:children page))))) @@ -269,7 +269,7 @@ :as params} posts] (when-not (empty? posts) (println (blue "compiling posts")) - (cryogen-io/create-folder (cryogen-io/path "/" blog-prefix post-root-uri)) + (cryogen-io/create-folder (new-io/path "/" blog-prefix post-root-uri)) (doseq [{:keys [uri] :as post} posts] (println "-->" (cyan uri)) @@ -280,7 +280,7 @@ (render-file (str "/html/" (:layout post)) (merge params {:active-page "posts" - :servlet-context (cryogen-io/path "/" blog-prefix "/") + :servlet-context (new-io/path "/" blog-prefix "/") :post post :disqus-shortname disqus-shortname :uri uri})))))) @@ -291,7 +291,7 @@ :as params} posts-by-tag] (when-not (empty? posts-by-tag) (println (blue "compiling tags")) - (cryogen-io/create-folder (cryogen-io/path "/" blog-prefix tag-root-uri)) + (cryogen-io/create-folder (new-io/path "/" blog-prefix tag-root-uri)) (doseq [[tag posts] posts-by-tag] (let [{:keys [name uri]} (tag-info params tag)] (println "-->" (cyan uri)) @@ -300,7 +300,7 @@ (render-file "/html/tag.html" (merge params {:active-page "tags" - :servlet-context (cryogen-io/path "/" blog-prefix "/") + :servlet-context (new-io/path "/" blog-prefix "/") :name name :posts posts :uri uri}))))))) @@ -315,7 +315,7 @@ (render-file "/html/tags.html" (merge params {:active-page "tags" - :servlet-context (cryogen-io/path "/" blog-prefix "/") + :servlet-context (new-io/path "/" blog-prefix "/") :uri uri}))))) (defn content-until-more-marker @@ -353,8 +353,8 @@ [previews params] (mapv (fn [[prev target next]] (merge target - {:prev (if prev (page-uri (cryogen-io/path "p" (str (:index prev) ".html")) params) nil) - :next (if next (page-uri (cryogen-io/path "p" (str (:index next) ".html")) params) nil)})) + {:prev (if prev (page-uri (new-io/path "p" (str (:index prev) ".html")) params) nil) + :next (if next (page-uri (new-io/path "p" (str (:index next) ".html")) params) nil)})) (partition 3 1 (flatten [nil previews nil])))) (defn compile-preview-pages @@ -368,18 +368,18 @@ previews (if (> (count previews) 1) (assoc-in previews [1 :prev] (page-uri "index.html" params)) previews)] - (cryogen-io/create-folder (cryogen-io/path "/" blog-prefix "p")) + (cryogen-io/create-folder (new-io/path "/" blog-prefix "p")) (doseq [{:keys [index posts prev next]} previews :let [index-page? (= 1 index)]] (write-html (if index-page? (page-uri "index.html" params) - (page-uri (cryogen-io/path "p" (str index ".html")) params)) + (page-uri (new-io/path "p" (str index ".html")) params)) params (render-file "/html/previews.html" (merge params {:active-page "preview" :home (when index-page? true) - :servlet-context (cryogen-io/path "/" blog-prefix "/") + :servlet-context (new-io/path "/" blog-prefix "/") :posts posts :prev-uri prev :next-uri next}))))))) @@ -416,7 +416,7 @@ {:active-page "archives" :archives true :groups (group-for-archive posts) - :servlet-context (cryogen-io/path "/" blog-prefix "/") + :servlet-context (new-io/path "/" blog-prefix "/") :uri uri}))))) (defn compile-authors @@ -424,7 +424,7 @@ [{:keys [blog-prefix author-root-uri author] :as params} posts] (println (blue "compiling authors")) - (cryogen-io/create-folder (cryogen-io/path "/" blog-prefix author-root-uri)) + (cryogen-io/create-folder (new-io/path "/" blog-prefix author-root-uri)) ;; if the post author is empty defaults to config's :author (doseq [{:keys [author posts]} (group-for-author posts author)] (let [uri (page-uri (str author ".html") :author-root-uri params)] @@ -435,7 +435,7 @@ (merge params {:author author :groups (group-for-archive posts) - :servlet-context (cryogen-io/path "/" blog-prefix "/") + :servlet-context (new-io/path "/" blog-prefix "/") :uri uri})))))) (defn tag-posts @@ -542,7 +542,7 @@ :archives-uri (page-uri "archives.html" config) :index-uri (page-uri "index.html" config) :tags-uri (page-uri "tags.html" config) - :rss-uri (cryogen-io/path "/" blog-prefix rss-name) + :rss-uri (new-io/path "/" blog-prefix rss-name) :site-url (if (.endsWith site-url "/") (.substring site-url 0 (dec (count site-url))) site-url)}) file-resource-prefix "resources/" file-target-prefix "target/" @@ -561,8 +561,8 @@ (println "\t-->" (cyan target-file-uri)) (println (blue "debug: home-page:")) (println "\t-->" (cyan (-> params :home-page)))) - (new-io/delete-resource-recursive! (.getPath target-file-uri)) - (new-io/delete-resource-recursive! (cp-io/path "resources/public" blog-prefix)) + (new-io/delete-resources! (.getPath target-file-uri)) + (new-io/delete-resources! (new-io/path "resources/public" blog-prefix)) (println (blue "preparing theme resources")) (new-io/copy-html-from-theme! "content/" theme @@ -571,18 +571,18 @@ (println (blue "copying theme resources")) (new-io/copy-resources-from-theme! "content/" theme - (cp-io/path "resources/public" blog-prefix) + (new-io/path "resources/public" blog-prefix) ignored-files) (println (blue "copying markup resources")) (new-io/copy-resources-from-templates! "content/" resources - (cp-io/path "resources/public" blog-prefix) + (new-io/path "resources/public" blog-prefix) ignored-files) (println (blue "prepare folders based on markup")) (new-io/create-dirs-from-markup-folders! "content/" (:posts config) (:pages config) - (cp-io/path "resources/public" blog-prefix) + (new-io/path "resources/public" blog-prefix) ignored-files) (set-custom-resource-path! (.toString target-file-uri)) (compile-pages params modelled-pages) @@ -598,16 +598,16 @@ (compile-authors params posts)) (println (blue "generating site map")) (->> (sitemap/generate site-url ignored-files) - (cryogen-io/create-file (cryogen-io/path "/" blog-prefix "sitemap.xml"))) + (cryogen-io/create-file (new-io/path "/" blog-prefix "sitemap.xml"))) (println (blue "generating main rss")) (->> (rss/make-channel config posts) - (cryogen-io/create-file (cryogen-io/path "/" blog-prefix rss-name))) + (cryogen-io/create-file (new-io/path "/" blog-prefix rss-name))) (println (blue "generating filtered rss")) (rss/make-filtered-channels config posts-by-tag) (println (blue "compiling sass")) (sass/compile-sass->css! (merge (select-keys config [:sass-path :compass-path :sass-src :ignored-files]) - {:sass-dest (cryogen-io/path ".." "public" blog-prefix sass-dest) + {:sass-dest (new-io/path ".." "public" blog-prefix sass-dest) :base-dir "resources/templates/"})))) (defn compile-assets-timed [] diff --git a/src/cryogen_core/io.clj b/src/cryogen_core/io.clj index 9c4bc01..9e67310 100644 --- a/src/cryogen_core/io.clj +++ b/src/cryogen_core/io.clj @@ -1,18 +1,11 @@ (ns cryogen-core.io (:require [clojure.java.io :as io] [clojure.string :as s] + [cryogen-core.new-io :as new-io] [me.raynes.fs :as fs])) (def public "resources/public") -(defn path - "Creates path from given parts, ignore empty elements" - [& path-parts] - (->> path-parts - (remove s/blank?) - (s/join "/") - (#(s/replace % #"/+" "/")))) - (defn re-filter [bool-fn re & other-res] (let [res (conj other-res re)] (reify java.io.FilenameFilter @@ -45,12 +38,12 @@ [])) (defn create-folder [folder] - (let [loc (io/file (path public folder))] + (let [loc (io/file (new-io/path public folder))] (when-not (.exists loc) (.mkdirs loc)))) (defn create-file [file data] - (spit (path public file) data)) + (spit (new-io/path public file) data)) (defn create-file-recursive [file data] (create-folder (.getParent (io/file file))) @@ -74,7 +67,7 @@ (defn copy-resources [{:keys [blog-prefix resources ignored-files]}] (doseq [resource resources] (let [src (str "resources/templates/" resource) - target (path public blog-prefix (fs/base-name resource))] + target (new-io/path public blog-prefix (fs/base-name resource))] (cond (not (.exists (io/file src))) (throw (IllegalArgumentException. (str "resource " src " not found"))) diff --git a/src/cryogen_core/new_io.clj b/src/cryogen_core/new_io.clj index 80d2c03..fef9815 100644 --- a/src/cryogen_core/new_io.clj +++ b/src/cryogen_core/new_io.clj @@ -7,11 +7,11 @@ ; You must not remove this notice, or any other, from this software. (ns cryogen-core.new-io - (:require - [clojure.java.io :as io] - [cryogen-core.classpath-able-io :as cp-io])) + (:require [clojure.string :as st] + [clojure.java.io :as io] + [cryogen-core.classpath-able-io :as cp-io])) -(def delete-resource-recursive! cp-io/delete-resource-recursive!) +(def delete-resources! cp-io/delete-resources!) (def public "resources/public") @@ -52,3 +52,11 @@ (doseq [resource resources] (io/make-parents (io/file (str target-path "/" (:virtual-path resource)))) (.mkdir (io/file (str target-path "/" (:virtual-path resource))))))) + +(defn path + "Creates path from given parts, ignore empty elements" + [& path-parts] + (->> path-parts + (remove st/blank?) + (st/join "/") + (#(st/replace % #"/+" "/")))) diff --git a/src/cryogen_core/rss.clj b/src/cryogen_core/rss.clj index 326409b..44e74de 100644 --- a/src/cryogen_core/rss.clj +++ b/src/cryogen_core/rss.clj @@ -1,5 +1,6 @@ (ns cryogen-core.rss (:require [clj-rss.core :as rss] + [cryogen-core.new-io :as new-io] [text-decoration.core :refer :all] [cryogen-core.io :as cryogen-io]) (:import java.util.Date)) @@ -30,6 +31,6 @@ (defn make-filtered-channels [{:keys [rss-filters blog-prefix] :as config} posts-by-tag] (doseq [filter rss-filters] - (let [uri (cryogen-io/path "/" blog-prefix (str (name filter) ".xml"))] + (let [uri (new-io/path "/" blog-prefix (str (name filter) ".xml"))] (println "\t-->" (cyan uri)) (cryogen-io/create-file uri (make-channel config (get posts-by-tag filter)))))) diff --git a/test/cryogen_core/classpath_able_io_test.clj b/test/cryogen_core/classpath_able_io_test.clj index e01ecf7..d0a33ea 100644 --- a/test/cryogen_core/classpath_able_io_test.clj +++ b/test/cryogen_core/classpath_able_io_test.clj @@ -89,10 +89,10 @@ ["file.js"] (sut/filter-for-ignore-patterns #".*\.ignore" ["file.js" "file.ignore"])))) -(deftest test-delete-resource-recursive! +(deftest test-delete-resources! (is (let [target-tmp "target/tmp3"] (.mkdir (io/file target-tmp)) (.createNewFile (io/file (str target-tmp "/file-tmp"))) - (sut/delete-resource-recursive! target-tmp) + (sut/delete-resources! target-tmp) (not (ftt/verify-dir-exists target-tmp))))) diff --git a/test/cryogen_core/new_io_test.clj b/test/cryogen_core/new_io_test.clj index da7533a..5be6110 100644 --- a/test/cryogen_core/new_io_test.clj +++ b/test/cryogen_core/new_io_test.clj @@ -33,7 +33,7 @@ (deftest test-create-dirs-from-markup-folders! (is (let [target-tmp "target/tmp-test-create-dirs-from-markup-folders"] - (sut/delete-resource-recursive! target-tmp) + (sut/delete-resources! target-tmp) (sut/create-dirs-from-markup-folders! "./not-existing-get-from-cp" "test_posts" @@ -49,7 +49,7 @@ (deftest test-copy-resources-from-theme! (is (let [target-tmp "target/tmp-test-copy-resources-from-theme"] - (sut/delete-resource-recursive! target-tmp) + (sut/delete-resources! target-tmp) (sut/copy-resources-from-theme! "./" theme target-tmp "") (and (ftt/verify-dir-exists (str target-tmp "/js"))