Rename old reitit.ring.spec and move multipart specs to new ns

This commit is contained in:
Juho Teperi 2020-03-05 14:47:23 +02:00
parent c4e84c2875
commit ec21998478
10 changed files with 57 additions and 36 deletions

View file

@ -12,6 +12,23 @@ We use [Break Versioning][breakver]. The version numbers follow a `<major>.<mino
[breakver]: https://github.com/ptaoussanis/encore/blob/master/BREAK-VERSIONING.md [breakver]: https://github.com/ptaoussanis/encore/blob/master/BREAK-VERSIONING.md
## Unreleased
### `reitit-ring`
- **BREAKING:** `reitit.ring.spec` namespace has been renamed to `reitit.ring.validate.spec`
### `reitit-spec`
- **BREAKING:** Added `reitit.ring.spec` namespace with specs for multipart parameter coercion.
**This replaces old `reitit.ring.spec` namespace with different namespace.**
### `reitit-middleware`
- **BREAKING:** `temp-file-part`, `bytes-part` and related specs have been removed from
`reitit.ring.middleware.multipart` namespace and been moved to `reitit.ring.spec`
namespace.
## 0.4.2 (2020-01-17) ## 0.4.2 (2020-01-17)
### `reitit` ### `reitit`

View file

@ -2,7 +2,7 @@
Ring route validation works [just like with core router](../basics/route_data_validation.md), with few differences: Ring route validation works [just like with core router](../basics/route_data_validation.md), with few differences:
* `reitit.ring.spec/validate` should be used instead of `reitit.spec/validate` - to support validating all endpoints (`:get`, `:post` etc.) * `reitit.ring.validate.spec/validate` should be used instead of `reitit.spec/validate` - to support validating all endpoints (`:get`, `:post` etc.)
* With `clojure.spec` validation, Middleware can contribute to route spec via `:specs` key. The effective route data spec is router spec merged with middleware specs. * With `clojure.spec` validation, Middleware can contribute to route spec via `:specs` key. The effective route data spec is router spec merged with middleware specs.
## Example ## Example
@ -12,7 +12,7 @@ A simple app with spec-validation turned on:
```clj ```clj
(require '[clojure.spec.alpha :as s]) (require '[clojure.spec.alpha :as s])
(require '[reitit.ring :as ring]) (require '[reitit.ring :as ring])
(require '[reitit.ring.spec :as rrs]) (require '[reitit.ring.validate.spec :as rrs])
(require '[reitit.spec :as rs]) (require '[reitit.spec :as rs])
(require '[expound.alpha :as e]) (require '[expound.alpha :as e])

View file

@ -10,9 +10,9 @@
[reitit.ring.middleware.exception :as exception] [reitit.ring.middleware.exception :as exception]
[reitit.ring.middleware.multipart :as multipart] [reitit.ring.middleware.multipart :as multipart]
[reitit.ring.middleware.parameters :as parameters] [reitit.ring.middleware.parameters :as parameters]
; [reitit.ring.middleware.dev :as dev] ; [reitit.ring.middleware.dev :as dev]
; [reitit.ring.spec :as spec] ; [reitit.ring.validate.spec :as spec]
; [spec-tools.spell :as spell] ; [spec-tools.spell :as spell]
[ring.adapter.jetty :as jetty] [ring.adapter.jetty :as jetty]
[muuntaja.core :as m] [muuntaja.core :as m]
[clojure.java.io :as io] [clojure.java.io :as io]

View file

@ -9,16 +9,17 @@
[reitit.ring.middleware.exception :as exception] [reitit.ring.middleware.exception :as exception]
[reitit.ring.middleware.multipart :as multipart] [reitit.ring.middleware.multipart :as multipart]
[reitit.ring.middleware.parameters :as parameters] [reitit.ring.middleware.parameters :as parameters]
[reitit.ring.spec :as ring-spec]
;; Uncomment to use ;; Uncomment to use
; [reitit.ring.middleware.dev :as dev] ; [reitit.ring.middleware.dev :as dev]
; [reitit.ring.spec :as spec] ; [reitit.ring.validate.spec :as spec]
; [spec-tools.spell :as spell] ; [spec-tools.spell :as spell]
[ring.adapter.jetty :as jetty] [ring.adapter.jetty :as jetty]
[muuntaja.core :as m] [muuntaja.core :as m]
[clojure.spec.alpha :as s] [clojure.spec.alpha :as s]
[clojure.java.io :as io])) [clojure.java.io :as io]))
(s/def ::file multipart/temp-file-part) (s/def ::file ring-spec/temp-file-part)
(s/def ::file-params (s/keys :req-un [::file])) (s/def ::file-params (s/keys :req-un [::file]))
(s/def ::name string?) (s/def ::name string?)

View file

@ -9,9 +9,10 @@
[reitit.ring.middleware.exception :as exception] [reitit.ring.middleware.exception :as exception]
[reitit.ring.middleware.multipart :as multipart] [reitit.ring.middleware.multipart :as multipart]
[reitit.ring.middleware.parameters :as parameters] [reitit.ring.middleware.parameters :as parameters]
[reitit.ring.spec :as ring-spec]
;; Uncomment to use ;; Uncomment to use
; [reitit.ring.middleware.dev :as dev] ; [reitit.ring.middleware.dev :as dev]
; [reitit.ring.spec :as spec] ; [reitit.ring.validate.spec :as spec]
; [spec-tools.spell :as spell] ; [spec-tools.spell :as spell]
[ring.adapter.jetty :as jetty] [ring.adapter.jetty :as jetty]
[muuntaja.core :as m] [muuntaja.core :as m]
@ -31,7 +32,7 @@
["/upload" ["/upload"
{:post {:summary "upload a file" {:post {:summary "upload a file"
:parameters {:multipart {:file multipart/temp-file-part}} :parameters {:multipart {:file ring-spec/temp-file-part}}
:responses {200 {:body {:name string?, :size int?}}} :responses {200 {:body {:name string?, :size int?}}}
:handler (fn [{{{:keys [file]} :multipart} :parameters}] :handler (fn [{{{:keys [file]} :multipart} :parameters}]
{:status 200 {:status 200

View file

@ -1,6 +1,6 @@
(ns reitit.http.spec (ns reitit.http.spec
(:require [clojure.spec.alpha :as s] (:require [clojure.spec.alpha :as s]
[reitit.ring.spec :as rrs] [reitit.ring.validate.spec :as rrs]
[reitit.interceptor :as interceptor] [reitit.interceptor :as interceptor]
[reitit.exception :as exception] [reitit.exception :as exception]
[reitit.spec :as rs])) [reitit.spec :as rs]))

View file

@ -1,28 +1,7 @@
(ns reitit.ring.middleware.multipart (ns reitit.ring.middleware.multipart
(:refer-clojure :exclude [compile]) (:refer-clojure :exclude [compile])
(:require [reitit.coercion :as coercion] (:require [reitit.coercion :as coercion]
[ring.middleware.multipart-params :as multipart-params] [ring.middleware.multipart-params :as multipart-params]))
[clojure.spec.alpha :as s]
[spec-tools.core :as st])
(:import (java.io File)))
(s/def ::filename string?)
(s/def ::content-type string?)
(s/def ::tempfile (partial instance? File))
(s/def ::bytes bytes?)
(s/def ::size int?)
(def temp-file-part
"Spec for file param created by ring.middleware.multipart-params.temp-file store."
(st/spec
{:spec (s/keys :req-un [::filename ::content-type ::tempfile ::size])
:swagger/type "file"}))
(def bytes-part
"Spec for file param created by ring.middleware.multipart-params.byte-array store."
(st/spec
{:spec (s/keys :req-un [::filename ::content-type ::bytes])
:swagger/type "file"}))
(defn- coerced-request [request coercers] (defn- coerced-request [request coercers]
(if-let [coerced (if coercers (coercion/coerce-request coercers request))] (if-let [coerced (if coercers (coercion/coerce-request coercers request))]

View file

@ -1,4 +1,4 @@
(ns reitit.ring.spec (ns reitit.ring.validate.spec
(:require [clojure.spec.alpha :as s] (:require [clojure.spec.alpha :as s]
[reitit.middleware :as middleware] [reitit.middleware :as middleware]
[reitit.spec :as rs] [reitit.spec :as rs]

View file

@ -0,0 +1,23 @@
(ns reitit.ring.spec
(:require [spec-tools.core :as st]
[clojure.spec.alpha :as s])
(:import (java.io File)))
(s/def ::filename string?)
(s/def ::content-type string?)
(s/def ::tempfile (partial instance? File))
(s/def ::bytes bytes?)
(s/def ::size int?)
(def temp-file-part
"Spec for file param created by ring.middleware.multipart-params.temp-file store."
(st/spec
{:spec (s/keys :req-un [::filename ::content-type ::tempfile ::size])
:swagger/type "file"}))
(def bytes-part
"Spec for file param created by ring.middleware.multipart-params.byte-array store."
(st/spec
{:spec (s/keys :req-un [::filename ::content-type ::bytes])
:swagger/type "file"}))

View file

@ -1,7 +1,7 @@
(ns reitit.ring-spec-test (ns reitit.ring-validate-spec-test
(:require [clojure.test :refer [deftest testing is]] (:require [clojure.test :refer [deftest testing is]]
[reitit.ring :as ring] [reitit.ring :as ring]
[reitit.ring.spec :as rrs] [reitit.ring.validate.spec :as rrs]
[reitit.ring.coercion :as rrc] [reitit.ring.coercion :as rrc]
[reitit.coercion.spec] [reitit.coercion.spec]
[clojure.spec.alpha :as s] [clojure.spec.alpha :as s]
@ -51,7 +51,7 @@
(testing "predicates are not allowed" (testing "predicates are not allowed"
(is (thrown-with-msg? (is (thrown-with-msg?
ExceptionInfo ExceptionInfo
#":reitit.ring.spec/invalid-specs" #":reitit.ring.validate.spec/invalid-specs"
(ring/router (ring/router
["/api" {:handler "identity"}] ["/api" {:handler "identity"}]
{:spec any? {:spec any?