Skip to content

Commit 4d3fa4d

Browse files
committed
Change prefer-handler check to run only once
Saves a map lookup on each request that goes through wrap-file.
1 parent 4b575e2 commit 4d3fa4d

File tree

1 file changed

+27
-19
lines changed

1 file changed

+27
-19
lines changed

ring-core/src/ring/middleware/file.clj

Lines changed: 27 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,30 @@
3232
(-> (response/file-response path options)
3333
(head/head-response request)))))))
3434

35+
(defn- wrap-file-prefer-files [handler root-path options]
36+
(fn
37+
([request]
38+
(or (file-request request root-path options) (handler request)))
39+
([request respond raise]
40+
(if-let [response (file-request request root-path options)]
41+
(respond response)
42+
(handler request respond raise)))))
43+
44+
(defn- wrap-file-prefer-handler [handler root-path options]
45+
(fn
46+
([request]
47+
(let [response (handler request)]
48+
(if (= 404 (:status response))
49+
(file-request request root-path options)
50+
response)))
51+
([request respond raise]
52+
(handler request
53+
(fn [response]
54+
(if (= 404 (:status response))
55+
(respond (file-request request root-path options))
56+
(respond response)))
57+
raise))))
58+
3559
(defn wrap-file
3660
"Wrap an handler such that the directory at the given root-path is checked for
3761
a static file with which to respond to the request, proxying the request to
@@ -46,22 +70,6 @@
4670
(wrap-file handler root-path {}))
4771
([handler root-path options]
4872
(ensure-dir root-path)
49-
(fn
50-
([request]
51-
(if (:prefer-handler? options)
52-
(let [response (handler request)]
53-
(if (= 404 (:status response))
54-
(file-request request root-path options)
55-
response))
56-
(or (file-request request root-path options) (handler request))))
57-
([request respond raise]
58-
(if (:prefer-handler? options)
59-
(handler request
60-
(fn [response]
61-
(if (= 404 (:status response))
62-
(respond (file-request request root-path options))
63-
(respond response)))
64-
raise)
65-
(if-let [response (file-request request root-path options)]
66-
(respond response)
67-
(handler request respond raise)))))))
73+
(if (:prefer-handler? options)
74+
(wrap-file-prefer-handler handler root-path options)
75+
(wrap-file-prefer-files handler root-path options))))

0 commit comments

Comments
 (0)