Polish docs, more tests

This commit is contained in:
Tommi Reiman 2017-08-19 16:04:44 +03:00
parent bc2706147c
commit 0276e82dd9
3 changed files with 44 additions and 9 deletions

View file

@ -63,7 +63,7 @@ Same routes flattened:
["/api/ping" ::ping]] ["/api/ping" ::ping]]
``` ```
## Routers ## Routing
For routing, a `Router` is needed. Reitit ships with 2 different router implementations: `LinearRouter` and `LookupRouter`, both based on the awesome [Pedestal](https://github.com/pedestal/pedestal/tree/master/route) implementation. For routing, a `Router` is needed. Reitit ships with 2 different router implementations: `LinearRouter` and `LookupRouter`, both based on the awesome [Pedestal](https://github.com/pedestal/pedestal/tree/master/route) implementation.
@ -78,7 +78,7 @@ Creating a router:
(reitit/router (reitit/router
[["/api" [["/api"
["/ping" ::ping] ["/ping" ::ping]
["/user/:id" ::user]])) ["/user/:id" ::user]]]))
``` ```
`LinearRouter` is created (as there are wildcard): `LinearRouter` is created (as there are wildcard):
@ -254,7 +254,8 @@ Routing based on `:request-method`:
(def app (def app
(ring/ring-handler (ring/ring-handler
(ring/router (ring/router
["/ping" {:get handler ["/ping" {:name ::ping
:get handler
:post handler}]))) :post handler}])))
(app {:request-method :get, :uri "/ping"}) (app {:request-method :get, :uri "/ping"})
@ -264,6 +265,16 @@ Routing based on `:request-method`:
; nil ; nil
``` ```
Reverse routing:
```clj
(-> app
(ring/get-router)
(reitit/match-by-name ::ping)
:path)
; "/ping"
```
Some middleware and a new handler: Some middleware and a new handler:
```clj ```clj
@ -387,8 +398,8 @@ Routers can be configured via options. Options allow things like [`clojure.spec`
| `:routes` | Initial resolved routes (default `[]`) | `:routes` | Initial resolved routes (default `[]`)
| `:meta` | Initial expanded route-meta vector (default `[]`) | `:meta` | Initial expanded route-meta vector (default `[]`)
| `:expand` | Function of `arg opts => meta` to expand route arg to route meta-data (default `reitit.core/expand`) | `:expand` | Function of `arg opts => meta` to expand route arg to route meta-data (default `reitit.core/expand`)
| `:coerce` | Function of `[path meta] opts => [path meta]` to coerce resolved route, can throw or return `nil` | `:coerce` | Function of `route opts => route` to coerce resolved route, can throw or return `nil`
| `:compile` | Function of `[path meta] opts => handler` to compile a route handler | `:compile` | Function of `route opts => handler` to compile a route handler
## Special thanks ## Special thanks

View file

@ -183,8 +183,8 @@
| `:routes` | Initial resolved routes (default `[]`) | `:routes` | Initial resolved routes (default `[]`)
| `:meta` | Initial expanded route-meta vector (default `[]`) | `:meta` | Initial expanded route-meta vector (default `[]`)
| `:expand` | Function of `arg opts => meta` to expand route arg to route meta-data (default `reitit.core/expand`) | `:expand` | Function of `arg opts => meta` to expand route arg to route meta-data (default `reitit.core/expand`)
| `:coerce` | Function of `[path meta] opts => [path meta]` to coerce resolved route, can throw or return `nil` | `:coerce` | Function of `route opts => route` to coerce resolved route, can throw or return `nil`
| `:compile` | Function of `[path meta] opts => handler` to compile a route handler" | `:compile` | Function of `route opts => handler` to compile a route handler"
([data] ([data]
(router data {})) (router data {}))
([data opts] ([data opts]

View file

@ -2,7 +2,8 @@
(:require [clojure.test :refer [deftest testing is]] (:require [clojure.test :refer [deftest testing is]]
[reitit.middleware :as middleware] [reitit.middleware :as middleware]
[reitit.ring :as ring] [reitit.ring :as ring]
[clojure.set :as set]) [clojure.set :as set]
[reitit.core :as reitit])
#?(:clj #?(:clj
(:import (clojure.lang ExceptionInfo)))) (:import (clojure.lang ExceptionInfo))))
@ -122,7 +123,30 @@
respond (partial reset! result), raise ::not-called] respond (partial reset! result), raise ::not-called]
(app {:uri "/api/users" :request-method :post} respond raise) (app {:uri "/api/users" :request-method :post} respond raise)
(is (= {:status 200, :body [:api :users :post :ok :post :users :api]} (is (= {:status 200, :body [:api :users :post :ok :post :users :api]}
@result))))))) @result))))))
(testing "named routes"
(let [router (ring/router
[["/api"
["/all" {:handler handler :name ::all}]
["/get" {:get {:handler handler :name ::HIDDEN}
:name ::get}]
["/users" {:get handler
:post handler
:handler handler
:name ::users}]]])
app (ring/ring-handler router)]
(testing "router can be extracted"
(is (= router (ring/get-router app))))
(testing "only top-level route names are matched"
(is (= [::all ::get ::users]
(reitit/route-names router))))
(testing "all named routes can be matched"
(doseq [name (reitit/route-names router)]
(is (= name (-> (reitit/match-by-name router name) :meta :name))))))))
(defn wrap-enforce-roles [handler] (defn wrap-enforce-roles [handler]
(fn [{:keys [::roles] :as request}] (fn [{:keys [::roles] :as request}]