File tree Expand file tree Collapse file tree 2 files changed +24
-5
lines changed Expand file tree Collapse file tree 2 files changed +24
-5
lines changed Original file line number Diff line number Diff line change 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)
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 #"|/.*" }]
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)]
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
311312 [path args & routes]
312313 `(make-context
313314 ~(context-route path)
315+ ~path
314316 (fn [request#]
315317 (let-request [~args request#]
316318 (routes ~@routes)))))
Original file line number Diff line number Diff line change 196196 " /foo/10/b%20r" " /b%20r"
197197 " /bar/10" nil )))
198198
199+ (testing " :compojure/route-context key"
200+ (let [handler (context " /foo/:id" [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" )
You can’t perform that action at this time.
0 commit comments