add get resources
This commit is contained in:
parent
24b55040f0
commit
f92f674680
2 changed files with 46 additions and 4 deletions
|
@ -8,12 +8,12 @@
|
|||
|
||||
(ns cryogen-core.classpath-able-io.cp
|
||||
(:require [clojure.java.io :as io]
|
||||
[clojure.string :as st]
|
||||
[schema.core :as s]
|
||||
[cryogen-core.classpath-able-io.this :as this]
|
||||
[cryogen-core.classpath-able-io.fs :as fs]
|
||||
[cryogen-core.classpath-able-io.jar :as jar])
|
||||
(:import [java.net URI]
|
||||
[java.nio.file Paths Files LinkOption]))
|
||||
(:import [java.nio.file Paths Files]))
|
||||
|
||||
(s/defn path-if-exists :- this/JavaPath
|
||||
[& path-elements ;:- this/VirtualPath
|
||||
|
@ -28,3 +28,29 @@
|
|||
(Paths/get resource-uri))))
|
||||
(catch Exception e
|
||||
nil)))
|
||||
|
||||
(s/defn fs-prefix
|
||||
[java-path
|
||||
base-path
|
||||
path]
|
||||
(let [java-path-str (.toString java-path)]
|
||||
(subs java-path-str 0 (- (count java-path-str) (+ (count base-path) (count path) 2)))))
|
||||
|
||||
(s/defn get-resources ;:- [this/Resource]
|
||||
"base-path is sensible for getting the right jar from classpath. So base-path
|
||||
should be specific enough for the jar desired. Paths must not be empty."
|
||||
[base-path :- this/VirtualPath
|
||||
paths :- [this/VirtualPath]]
|
||||
(flatten
|
||||
(map
|
||||
(fn [p]
|
||||
(if-let [path-to-work-with (path-if-exists base-path p)]
|
||||
(if (jar/is-from-classpath-jar? (.toUri path-to-work-with))
|
||||
(jar/get-resources base-path [p])
|
||||
(fs/get-resources
|
||||
(fs-prefix path-to-work-with base-path p)
|
||||
base-path
|
||||
[p]
|
||||
:java-classpath-filesystem))
|
||||
[]))
|
||||
paths)))
|
|
@ -11,8 +11,7 @@
|
|||
[clojure.java.io :as io]
|
||||
[schema.core :as s]
|
||||
[cryogen-core.file-test-tools :as ftt]
|
||||
[cryogen-core.classpath-able-io.cp :as sut])
|
||||
(:import [java.net URI]))
|
||||
[cryogen-core.classpath-able-io.cp :as sut]))
|
||||
|
||||
(deftest should-find-path-on-cp
|
||||
(is
|
||||
|
@ -21,3 +20,20 @@
|
|||
(sut/path-if-exists "dummy" "dummy_from_jar"))
|
||||
(is
|
||||
(sut/path-if-exists "dummy_only_in_cp_fs")))
|
||||
|
||||
|
||||
(deftest should-get-resources-from-jar-and-fs-classpath
|
||||
(is (=
|
||||
[]
|
||||
(sut/get-resources "" ["not-existing"])))
|
||||
(is (=
|
||||
[{:virtual-path "dummy_from_jar", :source-type :java-classpath-jar, :resource-type :file}]
|
||||
(map ftt/filter-object
|
||||
(sut/get-resources "dummy" ["dummy_from_jar"]))))
|
||||
(is (=
|
||||
[{:virtual-path "test_pages/home" :source-type :java-classpath-filesystem :resource-type :dir}
|
||||
{:virtual-path "test_pages/home/.gitkeep" :source-type :java-classpath-filesystem :resource-type :file}
|
||||
{:virtual-path "test_posts/home" :source-type :java-classpath-filesystem :resource-type :dir}
|
||||
{:virtual-path "test_posts/home/.gitkeep" :source-type :java-classpath-filesystem :resource-type :file}]
|
||||
(map ftt/filter-object
|
||||
(sut/get-resources "templates/md" ["test_pages/home" "test_posts/home"])))))
|
Loading…
Reference in a new issue