Skip to content

Commit 6ae24d4

Browse files
committed
Add :compojure/route-context to the request map
Contains the combined route context for the current route.
1 parent d8f39af commit 6ae24d4

File tree

2 files changed

+24
-5
lines changed

2 files changed

+24
-5
lines changed

src/compojure/core.clj

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,7 @@
251251
(defn- remove-suffix [path suffix]
252252
(subs path 0 (- (count path) (count suffix))))
253253

254-
(defn- context-request [request route]
254+
(defn- context-request [request route route-context]
255255
(if-let [params (clout/route-matches route request)]
256256
(let [uri (:uri request)
257257
path (:path-info request uri)
@@ -261,7 +261,8 @@
261261
(-> request
262262
(assoc-route-params (decode-route-params params))
263263
(assoc :path-info (if (= subpath "") "/" subpath)
264-
:context (remove-suffix uri subpath))))))
264+
:context (remove-suffix uri subpath))
265+
(update :compojure/route-context str route-context)))))
265266

266267
(defn- context-route [route]
267268
(let [re-context {:__path-info #"|/.*"}]
@@ -279,7 +280,7 @@
279280
:else
280281
`(clout/route-compile (str ~route ":__path-info") ~re-context))))
281282

282-
(defn ^:no-doc make-context [route make-handler]
283+
(defn ^:no-doc make-context [route path make-handler]
283284
(letfn [(handler
284285
([request]
285286
(when-let [context-handler (make-handler request)]
@@ -292,10 +293,10 @@
292293
handler
293294
(fn
294295
([request]
295-
(if-let [request (context-request request route)]
296+
(if-let [request (context-request request route path)]
296297
(handler request)))
297298
([request respond raise]
298-
(if-let [request (context-request request route)]
299+
(if-let [request (context-request request route path)]
299300
(handler request respond raise)
300301
(respond nil)))))))
301302

@@ -311,6 +312,7 @@
311312
[path args & routes]
312313
`(make-context
313314
~(context-route path)
315+
~path
314316
(fn [request#]
315317
(let-request [~args request#]
316318
(routes ~@routes)))))

test/compojure/core_test.clj

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,23 @@
196196
"/foo/10/b%20r" "/b%20r"
197197
"/bar/10" nil)))
198198

199+
(testing ":compojure/route-context key"
200+
(let [handler (context "/foo/:id" [_] :compojure/route-context)]
201+
(are [url route-context] (= (handler (mock/request :get url)) route-context)
202+
"/foo/10" "/foo/:id"
203+
"/foo/10/bar" "/foo/:id"
204+
"/foo/10/b%20r" "/foo/:id"
205+
"/bar/10" nil)))
206+
207+
(testing ":compojure/route-context key in nested context"
208+
(let [handler (context "/foo/:foo-id" [_]
209+
(context "/bar/:bar-id" [_] :compojure/route-context))]
210+
(are [url route-context] (= (handler (mock/request :get url)) route-context)
211+
"/foo/1/bar/2" "/foo/:foo-id/bar/:bar-id"
212+
"/foo/1/bar/2/baz" "/foo/:foo-id/bar/:bar-id"
213+
"/foo/1/bar/2/b%20r" "/foo/:foo-id/bar/:bar-id"
214+
"/bar/10" nil)))
215+
199216
(testing "routes"
200217
(let [handler (context "/foo/:id" [id]
201218
(GET "/" [] "root")

0 commit comments

Comments
 (0)