Skip to content

Commit cfc0be3

Browse files
authored
Merge pull request #446 from bsless/faster-params
Improve performance of params middleware
2 parents 4292f99 + 1147268 commit cfc0be3

File tree

1 file changed

+18
-10
lines changed

1 file changed

+18
-10
lines changed

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

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,25 +8,33 @@
88
(let [params (codec/form-decode params encoding)]
99
(if (map? params) params {})))
1010

11+
(defn- assoc-param-map [req k v]
12+
(some-> req (assoc k (if-let [v' (req k)]
13+
(reduce-kv assoc v' v)
14+
v))))
15+
1116
(defn assoc-query-params
1217
"Parse and assoc parameters from the query string with the request."
1318
{:added "1.3"}
1419
[request encoding]
15-
(merge-with merge request
16-
(if-let [query-string (:query-string request)]
17-
(let [params (parse-params query-string encoding)]
18-
{:query-params params, :params params})
19-
{:query-params {}, :params {}})))
20+
(let [params (if-let [query-string (:query-string request)]
21+
(parse-params query-string encoding)
22+
{})]
23+
(-> request
24+
(assoc-param-map :query-params params)
25+
(assoc-param-map :params params))))
2026

2127
(defn assoc-form-params
2228
"Parse and assoc parameters from the request body with the request."
2329
{:added "1.2"}
2430
[request encoding]
25-
(merge-with merge request
26-
(if-let [body (and (req/urlencoded-form? request) (:body request))]
27-
(let [params (parse-params (slurp body :encoding encoding) encoding)]
28-
{:form-params params, :params params})
29-
{:form-params {}, :params {}})))
31+
(let [params (if-let [body (and (req/urlencoded-form? request)
32+
(:body request))]
33+
(parse-params (slurp body :encoding encoding) encoding)
34+
{})]
35+
(-> request
36+
(assoc-param-map :form-params params)
37+
(assoc-param-map :params params))))
3038

3139
(defn params-request
3240
"Adds parameters from the query string and the request body to the request

0 commit comments

Comments
 (0)