Skip to content

Commit ecf2a04

Browse files
committed
Merge pull request #213 from metosin/rename-parameters
Name options, parameters and swagger parameters differently
2 parents 144898f + f6b2c7a commit ecf2a04

4 files changed

Lines changed: 38 additions & 43 deletions

File tree

CHANGELOG.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,8 @@ take a vector of middleware containing either
6565
* `[(fn [handler] (wrap-foo handler {:opts :bar}))]`
6666
* Similar to [duct](https://github.com/weavejester/duct/wiki/Components#handlers)
6767

68-
69-
68+
* **BREAKING**: (Custom restructuring handlers only) `:parameters` key used by `restructure-param`
69+
has been renamed to `:swagger`.
7070

7171
### Migration guide
7272

src/compojure/api/common.clj

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,5 @@
11
(ns compojure.api.common)
22

3-
(defmacro map-of
4-
"creates map with symbol names as keywords as keys and
5-
symbol values as values."
6-
[& syms]
7-
`(zipmap ~(vec (map keyword syms)) ~(vec syms)))
8-
93
(defn plain-map?
104
"checks whether input is a map, but not a record"
115
[x] (and (map? x) (not (record? x))))

src/compojure/api/meta.clj

Lines changed: 36 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
(ns compojure.api.meta
22
(:require [clojure.walk :refer [keywordize-keys]]
3-
[compojure.api.common :refer :all]
3+
[compojure.api.common :refer [extract-parameters]]
44
[compojure.api.middleware :as mw]
55
[compojure.api.exception :as ex]
66

77
compojure.core
88
#_clout.core
99

10-
[plumbing.core :refer :all]
10+
[plumbing.core :refer [letk]]
1111
[plumbing.fnk.impl :as fnk-impl]
1212
[ring.swagger.common :as rsc]
1313
[ring.swagger.json-schema :as js]
@@ -109,19 +109,19 @@
109109
;;
110110

111111
(defmethod restructure-param :summary [k v acc]
112-
(update-in acc [:parameters] assoc k v))
112+
(update-in acc [:swagger] assoc k v))
113113

114114
(defmethod restructure-param :description [k v acc]
115-
(update-in acc [:parameters] assoc k v))
115+
(update-in acc [:swagger] assoc k v))
116116

117117
(defmethod restructure-param :operationId [k v acc]
118-
(update-in acc [:parameters] assoc k v))
118+
(update-in acc [:swagger] assoc k v))
119119

120120
(defmethod restructure-param :consumes [k v acc]
121-
(update-in acc [:parameters] assoc k v))
121+
(update-in acc [:swagger] assoc k v))
122122

123123
(defmethod restructure-param :produces [k v acc]
124-
(update-in acc [:parameters] assoc k v))
124+
(update-in acc [:swagger] assoc k v))
125125

126126
;;
127127
;; Smart restructurings
@@ -131,7 +131,7 @@
131131
; Example:
132132
; :no-doc true
133133
(defmethod restructure-param :no-doc [_ v acc]
134-
(update-in acc [:parameters] assoc :x-no-doc v))
134+
(update-in acc [:swagger] assoc :x-no-doc v))
135135

136136
; publishes the data as swagger-parameters without any side-effects / coercion.
137137
; Examples:
@@ -141,19 +141,19 @@
141141
; :paramerers {:query {:q s/Str}
142142
; :body NewUser}}}
143143
(defmethod restructure-param :swagger [_ swagger acc]
144-
(update-in acc [:parameters] rsc/deep-merge swagger))
144+
(update-in acc [:swagger] rsc/deep-merge swagger))
145145

146146
; Route name, used with path-for
147147
; Example:
148148
; :name :user-route
149149
(defmethod restructure-param :name [_ v acc]
150-
(update-in acc [:parameters] assoc :x-name v))
150+
(update-in acc [:swagger] assoc :x-name v))
151151

152152
; Tags for api categorization. Ignores duplicates.
153153
; Examples:
154154
; :tags [:admin]
155155
(defmethod restructure-param :tags [_ tags acc]
156-
(update-in acc [:parameters :tags] (comp set into) tags))
156+
(update-in acc [:swagger :tags] (comp set into) tags))
157157

158158
; Defines a return type and coerces the return value of a body against it.
159159
; Examples:
@@ -163,7 +163,7 @@
163163
(defmethod restructure-param :return [_ schema acc]
164164
(let [response (convert-return schema)]
165165
(-> acc
166-
(update-in [:parameters :responses] (fnil conj []) response)
166+
(update-in [:swagger :responses] (fnil conj []) response)
167167
(update-in [:responses] (fnil conj []) response))))
168168

169169
; value is a map of http-response-code -> Schema. Translates to both swagger
@@ -174,7 +174,7 @@
174174
; :responses {403 {:schema ErrorEnvelope, :description \"Underflow\"}}
175175
(defmethod restructure-param :responses [_ responses acc]
176176
(-> acc
177-
(update-in [:parameters :responses] (fnil conj []) responses)
177+
(update-in [:swagger :responses] (fnil conj []) responses)
178178
(update-in [:responses] (fnil conj []) responses)))
179179

180180
; reads body-params into a enhanced let. First parameter is the let symbol,
@@ -184,7 +184,7 @@
184184
(defmethod restructure-param :body [_ [value schema] acc]
185185
(-> acc
186186
(update-in [:lets] into [value (src-coerce! schema :body-params :body)])
187-
(assoc-in [:parameters :parameters :body] schema)))
187+
(assoc-in [:swagger :parameters :body] schema)))
188188

189189
; reads query-params into a enhanced let. First parameter is the let symbol,
190190
; second is the Schema to be coerced! against.
@@ -193,7 +193,7 @@
193193
(defmethod restructure-param :query [_ [value schema] acc]
194194
(-> acc
195195
(update-in [:lets] into [value (src-coerce! schema :query-params :string)])
196-
(assoc-in [:parameters :parameters :query] schema)))
196+
(assoc-in [:swagger :parameters :query] schema)))
197197

198198
; reads header-params into a enhanced let. First parameter is the let symbol,
199199
; second is the Schema to be coerced! against.
@@ -202,55 +202,55 @@
202202
(defmethod restructure-param :headers [_ [value schema] acc]
203203
(-> acc
204204
(update-in [:lets] into [value (src-coerce! schema :headers :string)])
205-
(assoc-in [:parameters :parameters :header] schema)))
205+
(assoc-in [:swagger :parameters :header] schema)))
206206

207207
; restructures body-params with plumbing letk notation. Example:
208208
; :body-params [id :- Long name :- String]
209209
(defmethod restructure-param :body-params [_ body-params acc]
210210
(let [schema (strict (fnk-schema body-params))]
211211
(-> acc
212212
(update-in [:letks] into [body-params (src-coerce! schema :body-params :body)])
213-
(assoc-in [:parameters :parameters :body] schema))))
213+
(assoc-in [:swagger :parameters :body] schema))))
214214

215215
; restructures form-params with plumbing letk notation. Example:
216216
; :form-params [id :- Long name :- String]
217217
(defmethod restructure-param :form-params [_ form-params acc]
218218
(let [schema (strict (fnk-schema form-params))]
219219
(-> acc
220220
(update-in [:letks] into [form-params (src-coerce! schema :form-params :string)])
221-
(update-in [:parameters :parameters :formData] st/merge schema)
222-
(assoc-in [:parameters :consumes] ["application/x-www-form-urlencoded"]))))
221+
(update-in [:swagger :parameters :formData] st/merge schema)
222+
(assoc-in [:swagger :consumes] ["application/x-www-form-urlencoded"]))))
223223

224224
(defmethod restructure-param :multipart-params [_ params acc]
225225
(let [schema (strict (fnk-schema params))]
226226
(-> acc
227227
(update-in [:letks] into [params (src-coerce! schema :multipart-params :string)])
228-
(update-in [:parameters :parameters :formData] st/merge schema)
229-
(assoc-in [:parameters :consumes] ["multipart/form-data"]))))
228+
(update-in [:swagger :parameters :formData] st/merge schema)
229+
(assoc-in [:swagger :consumes] ["multipart/form-data"]))))
230230

231231
; restructures header-params with plumbing letk notation. Example:
232232
; :header-params [id :- Long name :- String]
233233
(defmethod restructure-param :header-params [_ header-params acc]
234234
(let [schema (fnk-schema header-params)]
235235
(-> acc
236236
(update-in [:letks] into [header-params (src-coerce! schema :headers :string)])
237-
(assoc-in [:parameters :parameters :header] schema))))
237+
(assoc-in [:swagger :parameters :header] schema))))
238238

239239
; restructures query-params with plumbing letk notation. Example:
240240
; :query-params [id :- Long name :- String]
241241
(defmethod restructure-param :query-params [_ query-params acc]
242242
(let [schema (fnk-schema query-params)]
243243
(-> acc
244244
(update-in [:letks] into [query-params (src-coerce! schema :query-params :string)])
245-
(assoc-in [:parameters :parameters :query] schema))))
245+
(assoc-in [:swagger :parameters :query] schema))))
246246

247247
; restructures path-params by plumbing letk notation. Example:
248248
; :path-params [id :- Long name :- String]
249249
(defmethod restructure-param :path-params [_ path-params acc]
250250
(let [schema (fnk-schema path-params)]
251251
(-> acc
252252
(update-in [:letks] into [path-params (src-coerce! schema :route-params :string)])
253-
(assoc-in [:parameters :parameters :path] schema))))
253+
(assoc-in [:swagger :parameters :path] schema))))
254254

255255
; Applies the given vector of middlewares to the route
256256
(defmethod restructure-param :middleware [_ middleware acc]
@@ -347,21 +347,26 @@
347347
(seq responses) (assoc :responses (apply merge responses))))
348348

349349
(defn restructure [method [path arg & args] {:keys [routes]}]
350-
(let [[parameters body] (extract-parameters args)
351-
[lets letks responses middleware] [[] [] nil []]
350+
(let [[options body] (extract-parameters args)
351+
lets []
352352
[path-string lets arg-with-request arg] (destructure-compojure-api-request path lets arg)
353353

354354
{:keys [lets
355355
letks
356356
responses
357357
middleware
358358
middlewares
359-
parameters
359+
swagger
360360
body]} (reduce
361361
(fn [acc [k v]]
362362
(restructure-param k v (update-in acc [:parameters] dissoc k)))
363-
(map-of lets letks responses middleware parameters body)
364-
parameters)
363+
{:lets lets
364+
:letks []
365+
:responses nil
366+
:middleware []
367+
:swagger {}
368+
:body body}
369+
options)
365370

366371
;; migration helper
367372
_ (assert (not middlewares) ":middlewares is deprecated with 1.0.0, use :middleware instead.")
@@ -396,5 +401,5 @@
396401
form))]
397402
(if routes
398403
`(let [childs# ~(if routes [`(~child-form {})] nil)]
399-
(routes/create ~path-string ~method (merge-parameters ~parameters) childs# ~form))
400-
`(routes/create ~path-string ~method (merge-parameters ~parameters) nil ~form))))
404+
(routes/create ~path-string ~method (merge-parameters ~swagger) childs# ~form))
405+
`(routes/create ~path-string ~method (merge-parameters ~swagger) nil ~form))))

test/compojure/api/common_test.clj

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,6 @@
22
(:require [compojure.api.common :refer :all]
33
[midje.sweet :refer :all]))
44

5-
(fact "map-of"
6-
(let [a 1 b true c [:abba :jabba]]
7-
(map-of a b c) => {:a 1 :b true :c [:abba :jabba]}))
8-
95
(fact "group-with"
106
(group-with pos? [1 -10 2 -4 -1 999]) => [[1 2 999] [-10 -4 -1]]
117
(group-with pos? [1 2 999]) => [[1 2 999] nil])

0 commit comments

Comments
 (0)