Skip to content

Commit f95fa73

Browse files
committed
Ensure static file directories exist
1 parent 48d8872 commit f95fa73

File tree

2 files changed

+19
-2
lines changed

2 files changed

+19
-2
lines changed

src/duct/middleware/web.clj

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
(ns duct.middleware.web
2-
(:require [duct.logger :as logger]
2+
(:require [clojure.java.io :as io]
3+
[duct.logger :as logger]
34
[integrant.core :as ig]
45
[ring.middleware.defaults :refer [wrap-defaults]]
56
[ring.middleware.stacktrace :refer [wrap-stacktrace]]
@@ -74,7 +75,12 @@
7475
(defmethod ig/init-key ::hide-errors [_ {:keys [error-handler]}]
7576
#(wrap-hide-errors % error-handler))
7677

78+
(defn- ensure-dirs-exist [dirs]
79+
(doseq [dir dirs :let [f (io/file dir)] :when (not (.exists f))]
80+
(.mkdirs f)))
81+
7782
(defmethod ig/init-key ::defaults [_ defaults]
83+
(ensure-dirs-exist (-> defaults :static :files))
7884
#(wrap-defaults % defaults))
7985

8086
(defmethod ig/init-key ::webjars [_ {:keys [path] :or {path "/assets"}}]

test/duct/middleware/web_test.clj

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33
[duct.logger :as logger]
44
[duct.middleware.web :refer :all]
55
[integrant.core :as ig]
6-
[ring.mock.request :as mock]))
6+
[ring.mock.request :as mock])
7+
(:import [java.nio.file Files]
8+
[java.nio.file.attribute FileAttribute]))
79

810
(defrecord TestLogger [logs]
911
logger/Logger
@@ -80,3 +82,12 @@
8082
(handler (mock/request :get "/") respond raise)
8183
(is (not (realized? raise)))
8284
(is (= @respond response))))))
85+
86+
(deftest test-wrap-defaults
87+
(let [attrs (make-array FileAttribute 0)
88+
tempdir (Files/createTempDirectory "duct" attrs)]
89+
(Files/delete tempdir)
90+
(ig/init-key :duct.middleware.web/defaults
91+
{:static {:files [(str tempdir)]}})
92+
(is (.exists (.toFile tempdir)))
93+
(Files/deleteIfExists tempdir)))

0 commit comments

Comments
 (0)