From 43f5a9ebe8626f5d44180bbb449ffb33ced1f182 Mon Sep 17 00:00:00 2001 From: Kirill Chernyshov Date: Tue, 29 May 2018 01:07:22 +0200 Subject: [PATCH] Fixes after review * Support catch-all-param as a swagger path template part --- .../reitit-swagger/src/reitit/swagger.cljc | 22 ++++++------------- test/cljc/reitit/swagger_test.clj | 2 +- 2 files changed, 8 insertions(+), 16 deletions(-) diff --git a/modules/reitit-swagger/src/reitit/swagger.cljc b/modules/reitit-swagger/src/reitit/swagger.cljc index 847da761..9e1748d5 100644 --- a/modules/reitit-swagger/src/reitit/swagger.cljc +++ b/modules/reitit-swagger/src/reitit/swagger.cljc @@ -1,5 +1,6 @@ (ns reitit.swagger (:require [reitit.core :as r] + [reitit.impl :as impl] [meta-merge.core :refer [meta-merge]] [clojure.spec.alpha :as s] [clojure.set :as set] @@ -63,20 +64,11 @@ {:name ::swagger :spec ::spec}) -(defn- path->template [path endpoint] - (let [path-parameters (filter (fn [{:keys [in]}] - (= in "path")) - (mapcat (fn [[_ {:keys [parameters]}]] - parameters) - endpoint))] - (loop [{:keys [name] :as path-parameter} (first path-parameters) - path-parameters (rest path-parameters) - path path] - (if path-parameter - (recur (first path-parameters) - (rest path-parameters) - (string/replace path (re-pattern (str ":" name)) (str "{" name "}"))) - path)))) +(defn- path->template [path] + (->> (impl/segments path) + (map #(if (impl/wild-or-catch-all-param? %) + (str "{" (subs % 1) "}") %)) + (string/join "/"))) (defn create-swagger-handler [] "Create a ring handler to emit swagger spec. Collects all routes from router which have @@ -99,7 +91,7 @@ (dissoc swagger :id))])) transform-path (fn [[p _ c]] (if-let [endpoint (some->> c (keep transform-endpoint) (seq) (into {}))] - [(path->template p endpoint) endpoint]))] + [(path->template p) endpoint]))] (if id (let [paths (->> router (r/routes) (filter accept-route) (map transform-path) (into {}))] {:status 200 diff --git a/test/cljc/reitit/swagger_test.clj b/test/cljc/reitit/swagger_test.clj index 3437df4f..c1d0631c 100644 --- a/test/cljc/reitit/swagger_test.clj +++ b/test/cljc/reitit/swagger_test.clj @@ -29,7 +29,7 @@ {:status 200, :body {:total (+ x y z)}})}}]] ["/schema" {:coercion schema/coercion} - ["/plus/:z" + ["/plus/*z" {:get {:summary "plus" :parameters {:query {:x Int, :y Int} :path {:z Int}}