mirror of
https://github.com/metosin/reitit.git
synced 2025-12-18 08:51:12 +00:00
fix examples
This commit is contained in:
parent
deeb2b2ba6
commit
a416060354
6 changed files with 27 additions and 23 deletions
|
|
@ -1,6 +1,6 @@
|
||||||
(ns example.dspec
|
(ns example.dspec
|
||||||
(:require [reitit.coercion.spec :as spec-coercion]
|
(:require [reitit.coercion.spec :as spec-coercion]
|
||||||
[example.server :as server]))
|
[example.middleware :as middleware]))
|
||||||
|
|
||||||
(defn handler [{{{:keys [x y]} :query} :parameters}]
|
(defn handler [{{{:keys [x y]} :query} :parameters}]
|
||||||
{:status 200
|
{:status 200
|
||||||
|
|
@ -9,6 +9,6 @@
|
||||||
|
|
||||||
(def app
|
(def app
|
||||||
(-> #'handler
|
(-> #'handler
|
||||||
(server/wrap-coercion
|
(middleware/wrap-coercion
|
||||||
{:parameters {:query {:x int?, :y int?}}
|
{:parameters {:query {:x int?, :y int?}}
|
||||||
:coercion spec-coercion/coercion})))
|
:coercion spec-coercion/coercion})))
|
||||||
|
|
|
||||||
18
examples/just-coercion-with-ring/src/example/middleware.clj
Normal file
18
examples/just-coercion-with-ring/src/example/middleware.clj
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
(ns example.middleware
|
||||||
|
(:require [muuntaja.middleware]
|
||||||
|
[ring.middleware.params]
|
||||||
|
[reitit.middleware :as middleware]
|
||||||
|
[reitit.ring.coercion :as rrc]))
|
||||||
|
|
||||||
|
;; unlift Middleware Record into vanilla Ring middlewareL
|
||||||
|
;; NOTE: to support format-based body coercion, an options map needs
|
||||||
|
;; to be set with :extract-request-format and extract-response-format
|
||||||
|
(defn wrap-coercion [handler resource]
|
||||||
|
(middleware/chain
|
||||||
|
[rrc/coerce-exceptions-middleware
|
||||||
|
rrc/coerce-request-middleware
|
||||||
|
rrc/coerce-response-middleware]
|
||||||
|
handler
|
||||||
|
resource
|
||||||
|
{:extract-request-format (comp :format :muuntaja/request)
|
||||||
|
:extract-response-format (comp :format :muuntaja/response)}))
|
||||||
|
|
@ -1,7 +1,6 @@
|
||||||
(ns example.naive
|
(ns example.naive
|
||||||
(:require [clojure.spec.alpha :as s]
|
(:require [clojure.spec.alpha :as s]
|
||||||
[clojure.walk :as walk]
|
[clojure.walk :as walk]))
|
||||||
[example.server :as server]))
|
|
||||||
|
|
||||||
(s/def ::x int?)
|
(s/def ::x int?)
|
||||||
(s/def ::y int?)
|
(s/def ::y int?)
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
(ns example.schema
|
(ns example.schema
|
||||||
(:require [reitit.coercion.schema :as schema-coercion]
|
(:require [reitit.coercion.schema :as schema-coercion]
|
||||||
[example.server :as server]))
|
[example.middleware :as middleware]))
|
||||||
|
|
||||||
(defn handler [{{{:keys [x y]} :query} :parameters}]
|
(defn handler [{{{:keys [x y]} :query} :parameters}]
|
||||||
{:status 200
|
{:status 200
|
||||||
|
|
@ -9,6 +9,6 @@
|
||||||
|
|
||||||
(def app
|
(def app
|
||||||
(-> #'handler
|
(-> #'handler
|
||||||
(server/wrap-coercion
|
(middleware/wrap-coercion
|
||||||
{:parameters {:query {:x Long, :y Long}}
|
{:parameters {:query {:x Long, :y Long}}
|
||||||
:coercion schema-coercion/coercion})))
|
:coercion schema-coercion/coercion})))
|
||||||
|
|
|
||||||
|
|
@ -1,23 +1,10 @@
|
||||||
(ns example.server
|
(ns example.server
|
||||||
(:require [ring.adapter.jetty :as jetty]
|
(:require [ring.adapter.jetty :as jetty]
|
||||||
[muuntaja.middleware]
|
[muuntaja.middleware]
|
||||||
[ring.middleware.params]
|
[ring.middleware.params]))
|
||||||
[reitit.middleware :as middleware]
|
|
||||||
[reitit.ring.coercion :as rrc]))
|
|
||||||
|
|
||||||
(defonce ^:private server (atom nil))
|
(defonce ^:private server (atom nil))
|
||||||
|
|
||||||
;; unlift Middleware Record into vanilla Ring middleware
|
|
||||||
;; NOTE: to support format-based body coercion, an options map needs
|
|
||||||
;; to be set with :extract-request-format and extract-response-format
|
|
||||||
(defn wrap-coercion [handler resource]
|
|
||||||
(middleware/chain
|
|
||||||
[rrc/coerce-exceptions-middleware
|
|
||||||
rrc/coerce-request-middleware
|
|
||||||
rrc/coerce-response-middleware]
|
|
||||||
handler
|
|
||||||
resource))
|
|
||||||
|
|
||||||
(defn restart [handler]
|
(defn restart [handler]
|
||||||
(let [app (-> handler
|
(let [app (-> handler
|
||||||
(ring.middleware.params/wrap-params)
|
(ring.middleware.params/wrap-params)
|
||||||
|
|
@ -25,6 +12,6 @@
|
||||||
(swap! server (fn [x]
|
(swap! server (fn [x]
|
||||||
(when x (.stop x))
|
(when x (.stop x))
|
||||||
(jetty/run-jetty
|
(jetty/run-jetty
|
||||||
handler
|
app
|
||||||
{:port 3000, :join? false})))
|
{:port 3000, :join? false})))
|
||||||
(println "server running in port 3000")))
|
(println "server running in port 3000")))
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
(:require [clojure.spec.alpha :as s]
|
(:require [clojure.spec.alpha :as s]
|
||||||
[spec-tools.spec :as spec]
|
[spec-tools.spec :as spec]
|
||||||
[reitit.coercion.spec :as spec-coercion]
|
[reitit.coercion.spec :as spec-coercion]
|
||||||
[example.server :as server]))
|
[example.middleware :as middleware]))
|
||||||
|
|
||||||
;; wrap into Spec Records to enable runtime conforming
|
;; wrap into Spec Records to enable runtime conforming
|
||||||
(s/def ::x spec/int?)
|
(s/def ::x spec/int?)
|
||||||
|
|
@ -17,6 +17,6 @@
|
||||||
|
|
||||||
(def app
|
(def app
|
||||||
(-> #'handler
|
(-> #'handler
|
||||||
(server/wrap-coercion
|
(middleware/wrap-coercion
|
||||||
{:parameters {:query ::request}
|
{:parameters {:query ::request}
|
||||||
:coercion spec-coercion/coercion})))
|
:coercion spec-coercion/coercion})))
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue