mirror of
https://github.com/metosin/reitit.git
synced 2026-02-15 07:45:17 +00:00
commit
09d3908a6c
23 changed files with 71 additions and 62 deletions
|
|
@ -1,4 +1,4 @@
|
||||||
## 0.1.1-SNAPSHOT
|
## 0.1.1 (2018-5-20)
|
||||||
|
|
||||||
### `reitit-core`
|
### `reitit-core`
|
||||||
|
|
||||||
|
|
@ -34,7 +34,7 @@
|
||||||
|
|
||||||
### `reitit-swagger`
|
### `reitit-swagger`
|
||||||
|
|
||||||
* New module to produce swagger-docs from routing tree, including `Coercion` definitions. Works with both middleware & interceptors and Schema & Spec. See [docs](https://metosin.github.io/reitit/ring/swagger.html).
|
* New module to produce swagger-docs from routing tree, including `Coercion` definitions. Works with both middleware & interceptors and Schema & Spec. See [docs](https://metosin.github.io/reitit/ring/swagger.html) and [example project](https://github.com/metosin/reitit/tree/master/examples/ring-swagger).
|
||||||
|
|
||||||
### `reitit-swagger-ui`
|
### `reitit-swagger-ui`
|
||||||
|
|
||||||
|
|
|
||||||
22
README.md
22
README.md
|
|
@ -36,18 +36,18 @@ See the [full documentation](https://metosin.github.io/reitit/) for details.
|
||||||
All bundled:
|
All bundled:
|
||||||
|
|
||||||
```clj
|
```clj
|
||||||
[metosin/reitit "0.1.1-SNAPSHOT"]
|
[metosin/reitit "0.1.1"]
|
||||||
```
|
```
|
||||||
|
|
||||||
Optionally, the parts can be required separately:
|
Optionally, the parts can be required separately:
|
||||||
|
|
||||||
```clj
|
```clj
|
||||||
[metosin/reitit-core "0.1.1-SNAPSHOT"]
|
[metosin/reitit-core "0.1.1"]
|
||||||
[metosin/reitit-ring "0.1.1-SNAPSHOT"]
|
[metosin/reitit-ring "0.1.1"]
|
||||||
[metosin/reitit-spec "0.1.1-SNAPSHOT"]
|
[metosin/reitit-spec "0.1.1"]
|
||||||
[metosin/reitit-schema "0.1.1-SNAPSHOT"]
|
[metosin/reitit-schema "0.1.1"]
|
||||||
[metosin/reitit-swagger "0.1.1-SNAPSHOT"]
|
[metosin/reitit-swagger "0.1.1"]
|
||||||
[metosin/reitit-swagger-ui "0.1.1-SNAPSHOT"]
|
[metosin/reitit-swagger-ui "0.1.1"]
|
||||||
```
|
```
|
||||||
|
|
||||||
## Quick start
|
## Quick start
|
||||||
|
|
@ -127,10 +127,14 @@ Invalid request:
|
||||||
; :in [:y]}],
|
; :in [:y]}],
|
||||||
; :value {:x "1", :y "a"},
|
; :value {:x "1", :y "a"},
|
||||||
; :in [:request :query-params]}}
|
; :in [:request :query-params]}}
|
||||||
|
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
**NOTE**: Reitit is not a batteries included web-stack. You should also include at least:
|
||||||
|
* content negotiation library like [Muuntaja](https://github.com/metosin/muuntaja)
|
||||||
|
* some default Ring-middleware like `ring.middleware.params/wrap-params`
|
||||||
|
|
||||||
|
See [Ring with Swagger Example](https://github.com/metosin/reitit/tree/master/examples/ring-swagger) for a runnable example. Plan is to have more batteries as separate modules, templates and example projects. Stay tuned.
|
||||||
|
|
||||||
## More info
|
## More info
|
||||||
|
|
||||||
[Check out the full documentation!](https://metosin.github.io/reitit/)
|
[Check out the full documentation!](https://metosin.github.io/reitit/)
|
||||||
|
|
|
||||||
|
|
@ -23,18 +23,18 @@ Modules:
|
||||||
To use Reitit, add the following dependecy to your project:
|
To use Reitit, add the following dependecy to your project:
|
||||||
|
|
||||||
```clj
|
```clj
|
||||||
[metosin/reitit "0.1.1-SNAPSHOT"]
|
[metosin/reitit "0.1.1"]
|
||||||
```
|
```
|
||||||
|
|
||||||
Optionally, the parts can be required separately:
|
Optionally, the parts can be required separately:
|
||||||
|
|
||||||
```clj
|
```clj
|
||||||
[metosin/reitit-core "0.1.1-SNAPSHOT"]
|
[metosin/reitit-core "0.1.1"]
|
||||||
[metosin/reitit-ring "0.1.1-SNAPSHOT"]
|
[metosin/reitit-ring "0.1.1"]
|
||||||
[metosin/reitit-spec "0.1.1-SNAPSHOT"]
|
[metosin/reitit-spec "0.1.1"]
|
||||||
[metosin/reitit-schema "0.1.1-SNAPSHOT"]
|
[metosin/reitit-schema "0.1.1"]
|
||||||
[metosin/reitit-swagger "0.1.1-SNAPSHOT"]
|
[metosin/reitit-swagger "0.1.1"]
|
||||||
[metosin/reitit-swagger-ui "0.1.1-SNAPSHOT"]
|
[metosin/reitit-swagger-ui "0.1.1"]
|
||||||
```
|
```
|
||||||
|
|
||||||
For discussions, there is a [#reitit](https://clojurians.slack.com/messages/reitit/) channel in [Clojurians slack](http://clojurians.net/).
|
For discussions, there is a [#reitit](https://clojurians.slack.com/messages/reitit/) channel in [Clojurians slack](http://clojurians.net/).
|
||||||
|
|
|
||||||
|
|
@ -46,4 +46,5 @@
|
||||||
["Swagger Support" {:file "doc/ring/swagger.md"}]]
|
["Swagger Support" {:file "doc/ring/swagger.md"}]]
|
||||||
["Performance" {:file "doc/performance.md"}]
|
["Performance" {:file "doc/performance.md"}]
|
||||||
["Interceptors (WIP)" {:file "doc/interceptors.md"}]
|
["Interceptors (WIP)" {:file "doc/interceptors.md"}]
|
||||||
|
["Development Instructions" {:file "doc/development.md"}]
|
||||||
["FAQ" {:file "doc/faq.md"}]]}
|
["FAQ" {:file "doc/faq.md"}]]}
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
[Ring](https://github.com/ring-clojure/ring) is a Clojure web applications library inspired by Python's WSGI and Ruby's Rack. By abstracting the details of HTTP into a simple, unified API, Ring allows web applications to be constructed of modular components that can be shared among a variety of applications, web servers, and web frameworks.
|
[Ring](https://github.com/ring-clojure/ring) is a Clojure web applications library inspired by Python's WSGI and Ruby's Rack. By abstracting the details of HTTP into a simple, unified API, Ring allows web applications to be constructed of modular components that can be shared among a variety of applications, web servers, and web frameworks.
|
||||||
|
|
||||||
```clj
|
```clj
|
||||||
[metosin/reitit-ring "0.1.1-SNAPSHOT"]
|
[metosin/reitit-ring "0.1.1"]
|
||||||
```
|
```
|
||||||
|
|
||||||
Ring-router adds support for [handlers](https://github.com/ring-clojure/ring/wiki/Concepts#handlers), [middleware](https://github.com/ring-clojure/ring/wiki/Concepts#middleware) and routing based on `:request-method`. Ring-router is created with `reitit.ring/router` function. It uses a custom route compiler, creating a optimized data structure for handling route matches, with compiled middleware chain & handlers for all request methods. It also ensures that all routes have a `:handler` defined. `reitit.ring/ring-handler` is used to create a Ring handler out of ring-router.
|
Ring-router adds support for [handlers](https://github.com/ring-clojure/ring/wiki/Concepts#handlers), [middleware](https://github.com/ring-clojure/ring/wiki/Concepts#middleware) and routing based on `:request-method`. Ring-router is created with `reitit.ring/router` function. It uses a custom route compiler, creating a optimized data structure for handling route matches, with compiled middleware chain & handlers for all request methods. It also ensures that all routes have a `:handler` defined. `reitit.ring/ring-handler` is used to create a Ring handler out of ring-router.
|
||||||
|
|
|
||||||
|
|
@ -55,7 +55,6 @@ A better way to serve files from conflicting paths, e.g. `"/*"`, is to serve the
|
||||||
| :path | optional path to mount the handler to. Works only if mounted outside of a router.
|
| :path | optional path to mount the handler to. Works only if mounted outside of a router.
|
||||||
| :loader | optional class loader to resolve the resources
|
| :loader | optional class loader to resolve the resources
|
||||||
| :index-files | optional vector of index-files to look in a resource directory, defaults to `["index.html"]`
|
| :index-files | optional vector of index-files to look in a resource directory, defaults to `["index.html"]`
|
||||||
| :allow-symlinks? | allow symlinks that lead to paths outside the root classpath directories, defaults to `false`
|
|
||||||
|
|
||||||
### TODO
|
### TODO
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
# Swagger Support
|
# Swagger Support
|
||||||
|
|
||||||
```
|
```
|
||||||
[metosin/reitit-swagger "0.1.1-SNAPSHOT"]
|
[metosin/reitit-swagger "0.1.1"]
|
||||||
```
|
```
|
||||||
|
|
||||||
Reitit supports [Swagger2](https://swagger.io/) documentation, thanks to [schema-tools](https://github.com/metosin/schema-tools) and [spec-tools](https://github.com/metosin/spec-tools). Documentation is extracted from route definitions, coercion `:parameters` and `:responses` and from a set of new documentation keys.
|
Reitit supports [Swagger2](https://swagger.io/) documentation, thanks to [schema-tools](https://github.com/metosin/schema-tools) and [spec-tools](https://github.com/metosin/spec-tools). Documentation is extracted from route definitions, coercion `:parameters` and `:responses` and from a set of new documentation keys.
|
||||||
|
|
@ -44,7 +44,7 @@ If you need to post-process the generated spec, just wrap the handler with a cus
|
||||||
[Swagger-ui](https://github.com/swagger-api/swagger-ui) is a user interface to visualize and interact with the Swagger spesification. To make things easy, there is a pre-integrated version of the swagger-ui as a separate module.
|
[Swagger-ui](https://github.com/swagger-api/swagger-ui) is a user interface to visualize and interact with the Swagger spesification. To make things easy, there is a pre-integrated version of the swagger-ui as a separate module.
|
||||||
|
|
||||||
```
|
```
|
||||||
[metosin/reitit-swagger-ui "0.1.1-SNAPSHOT"]
|
[metosin/reitit-swagger-ui "0.1.1"]
|
||||||
```
|
```
|
||||||
|
|
||||||
`reitit.swagger-ui/create-swagger-ui-hander` can be used to create a ring-handler to serve the swagger-ui. It accepts the following options:
|
`reitit.swagger-ui/create-swagger-ui-hander` can be used to create a ring-handler to serve the swagger-ui. It accepts the following options:
|
||||||
|
|
|
||||||
|
|
@ -36,4 +36,4 @@ http://localhost:3000/?x=1&y=20
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
Copyright © 2017 Metosin Oy
|
Copyright © 2017-2018 Metosin Oy
|
||||||
|
|
|
||||||
|
|
@ -3,4 +3,4 @@
|
||||||
:dependencies [[org.clojure/clojure "1.9.0"]
|
:dependencies [[org.clojure/clojure "1.9.0"]
|
||||||
[ring "1.6.3"]
|
[ring "1.6.3"]
|
||||||
[metosin/muuntaja "0.4.1"]
|
[metosin/muuntaja "0.4.1"]
|
||||||
[metosin/reitit "0.1.1-SNAPSHOT"]])
|
[metosin/reitit "0.1.1"]])
|
||||||
|
|
|
||||||
|
|
@ -30,4 +30,4 @@ http POST :3000/spec/plus x:=1 y:=20
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
Copyright © 2017 Metosin Oy
|
Copyright © 2017-2018 Metosin Oy
|
||||||
|
|
|
||||||
|
|
@ -3,4 +3,4 @@
|
||||||
:dependencies [[org.clojure/clojure "1.9.0"]
|
:dependencies [[org.clojure/clojure "1.9.0"]
|
||||||
[ring "1.6.3"]
|
[ring "1.6.3"]
|
||||||
[metosin/muuntaja "0.4.1"]
|
[metosin/muuntaja "0.4.1"]
|
||||||
[metosin/reitit "0.1.1-SNAPSHOT"]])
|
[metosin/reitit "0.1.1"]])
|
||||||
|
|
|
||||||
|
|
@ -23,4 +23,4 @@ http GET :3000/api/swagger.json
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
Copyright © 2017 Metosin Oy
|
Copyright © 2017-2018 Metosin Oy
|
||||||
|
|
|
||||||
|
|
@ -3,5 +3,5 @@
|
||||||
:dependencies [[org.clojure/clojure "1.9.0"]
|
:dependencies [[org.clojure/clojure "1.9.0"]
|
||||||
[ring "1.6.3"]
|
[ring "1.6.3"]
|
||||||
[metosin/muuntaja "0.5.0"]
|
[metosin/muuntaja "0.5.0"]
|
||||||
[metosin/reitit "0.1.1-SNAPSHOT"]]
|
[metosin/reitit "0.1.1"]]
|
||||||
:repl-options {:init-ns example.server})
|
:repl-options {:init-ns example.server})
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
(defproject metosin/reitit-core "0.1.1-SNAPSHOT"
|
(defproject metosin/reitit-core "0.1.1"
|
||||||
:description "Snappy data-driven router for Clojure(Script)"
|
:description "Snappy data-driven router for Clojure(Script)"
|
||||||
:url "https://github.com/metosin/reitit"
|
:url "https://github.com/metosin/reitit"
|
||||||
:license {:name "Eclipse Public License"
|
:license {:name "Eclipse Public License"
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
(defproject metosin/reitit-ring "0.1.1-SNAPSHOT"
|
(defproject metosin/reitit-ring "0.1.1"
|
||||||
:description "Reitit: Ring routing"
|
:description "Reitit: Ring routing"
|
||||||
:url "https://github.com/metosin/reitit"
|
:url "https://github.com/metosin/reitit"
|
||||||
:license {:name "Eclipse Public License"
|
:license {:name "Eclipse Public License"
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,8 @@
|
||||||
[reitit.impl :as impl]
|
[reitit.impl :as impl]
|
||||||
#?@(:clj [
|
#?@(:clj [
|
||||||
[ring.util.mime-type :as mime-type]
|
[ring.util.mime-type :as mime-type]
|
||||||
[ring.util.response :as response]])))
|
[ring.util.response :as response]])
|
||||||
|
[clojure.string :as str]))
|
||||||
|
|
||||||
(def http-methods #{:get :head :post :put :delete :connect :options :trace :patch})
|
(def http-methods #{:get :head :post :put :delete :connect :options :trace :patch})
|
||||||
(defrecord Methods [get head post put delete connect options trace patch])
|
(defrecord Methods [get head post put delete connect options trace patch])
|
||||||
|
|
@ -71,6 +72,7 @@
|
||||||
;; TODO: optimize for perf
|
;; TODO: optimize for perf
|
||||||
;; TODO: ring.middleware.not-modified/wrap-not-modified
|
;; TODO: ring.middleware.not-modified/wrap-not-modified
|
||||||
;; TODO: ring.middleware.head/wrap-head
|
;; TODO: ring.middleware.head/wrap-head
|
||||||
|
;; TODO: handle etags
|
||||||
(defn create-resource-handler
|
(defn create-resource-handler
|
||||||
"A ring handler for serving classpath resources, configured via options:
|
"A ring handler for serving classpath resources, configured via options:
|
||||||
|
|
||||||
|
|
@ -80,8 +82,7 @@
|
||||||
| :root | optional resource root, defaults to `\"public\"`
|
| :root | optional resource root, defaults to `\"public\"`
|
||||||
| :path | optional path to mount the handler to. Works only if mounted outside of a router.
|
| :path | optional path to mount the handler to. Works only if mounted outside of a router.
|
||||||
| :loader | optional class loader to resolve the resources
|
| :loader | optional class loader to resolve the resources
|
||||||
| :index-files | optional vector of index-files to look in a resource directory, defaults to `[\"index.html\"]`
|
| :index-files | optional vector of index-files to look in a resource directory, defaults to `[\"index.html\"]`"
|
||||||
| :allow-symlinks? | allow symlinks that lead to paths outside the root classpath directories, defaults to `false`"
|
|
||||||
([]
|
([]
|
||||||
(create-resource-handler nil))
|
(create-resource-handler nil))
|
||||||
([{:keys [parameter root path loader allow-symlinks? index-files paths]
|
([{:keys [parameter root path loader allow-symlinks? index-files paths]
|
||||||
|
|
@ -90,30 +91,29 @@
|
||||||
index-files ["index.html"]
|
index-files ["index.html"]
|
||||||
paths (constantly nil)}}]
|
paths (constantly nil)}}]
|
||||||
(let [options {:root root, :loader loader, :allow-symlinks? allow-symlinks?}
|
(let [options {:root root, :loader loader, :allow-symlinks? allow-symlinks?}
|
||||||
path-size (inc (count path))
|
path-size (count path)
|
||||||
create (fn [handler]
|
create (fn [handler]
|
||||||
(fn
|
(fn
|
||||||
([request] (handler request))
|
([request] (handler request))
|
||||||
([request respond _] (respond (handler request)))))
|
([request respond _] (respond (handler request)))))
|
||||||
resource-response (fn [path accept]
|
resource-response (fn [path]
|
||||||
(if-let [path (accept path)]
|
(if-let [response (or (paths path) (response/resource-response path options))]
|
||||||
(if-let [response (or (paths path) (response/resource-response path options))]
|
(response/content-type response (mime-type/ext-mime-type path))))
|
||||||
(response/content-type response (mime-type/ext-mime-type path)))))
|
path-or-index-response (fn [path]
|
||||||
path-or-index-response (fn [path accept]
|
(or (resource-response path)
|
||||||
(or (resource-response path accept)
|
(let [separator (if-not (str/ends-with? path "/") "/")]
|
||||||
(loop [[file & files] index-files]
|
(loop [[file & files] index-files]
|
||||||
(if file
|
(if file
|
||||||
(or (resource-response (str path "/" file) accept)
|
(or (resource-response (str path separator file))
|
||||||
(recur files))))))
|
(recur files)))))))
|
||||||
handler (if path
|
handler (if path
|
||||||
(fn [request]
|
(fn [request]
|
||||||
(let [uri (:uri request)]
|
(let [uri (:uri request)]
|
||||||
(path-or-index-response uri (fn [path]
|
(if-let [path (if (>= (count uri) path-size) (subs uri path-size))]
|
||||||
(if (>= (count path) path-size)
|
(path-or-index-response path))))
|
||||||
(subs path path-size))))))
|
|
||||||
(fn [request]
|
(fn [request]
|
||||||
(let [path (-> request :path-params parameter)]
|
(let [path (-> request :path-params parameter)]
|
||||||
(or (path-or-index-response path identity) {:status 404}))))]
|
(or (path-or-index-response path) {:status 404}))))]
|
||||||
(create handler)))))
|
(create handler)))))
|
||||||
|
|
||||||
(defn ring-handler
|
(defn ring-handler
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
(defproject metosin/reitit-schema "0.1.1-SNAPSHOT"
|
(defproject metosin/reitit-schema "0.1.1"
|
||||||
:description "Reitit: Plumatic Schema coercion"
|
:description "Reitit: Plumatic Schema coercion"
|
||||||
:url "https://github.com/metosin/reitit"
|
:url "https://github.com/metosin/reitit"
|
||||||
:license {:name "Eclipse Public License"
|
:license {:name "Eclipse Public License"
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
(defproject metosin/reitit-spec "0.1.1-SNAPSHOT"
|
(defproject metosin/reitit-spec "0.1.1"
|
||||||
:description "Reitit: clojure.spec coercion"
|
:description "Reitit: clojure.spec coercion"
|
||||||
:url "https://github.com/metosin/reitit"
|
:url "https://github.com/metosin/reitit"
|
||||||
:license {:name "Eclipse Public License"
|
:license {:name "Eclipse Public License"
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
(defproject metosin/reitit-swagger-ui "0.1.1-SNAPSHOT"
|
(defproject metosin/reitit-swagger-ui "0.1.1"
|
||||||
:description "Reitit: Swagger-ui support"
|
:description "Reitit: Swagger-ui support"
|
||||||
:url "https://github.com/metosin/reitit"
|
:url "https://github.com/metosin/reitit"
|
||||||
:license {:name "Eclipse Public License"
|
:license {:name "Eclipse Public License"
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
(defproject metosin/reitit-swagger "0.1.1-SNAPSHOT"
|
(defproject metosin/reitit-swagger "0.1.1"
|
||||||
:description "Reitit: Swagger-support"
|
:description "Reitit: Swagger-support"
|
||||||
:url "https://github.com/metosin/reitit"
|
:url "https://github.com/metosin/reitit"
|
||||||
:license {:name "Eclipse Public License"
|
:license {:name "Eclipse Public License"
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
(defproject metosin/reitit "0.1.1-SNAPSHOT"
|
(defproject metosin/reitit "0.1.1"
|
||||||
:description "Snappy data-driven router for Clojure(Script)"
|
:description "Snappy data-driven router for Clojure(Script)"
|
||||||
:url "https://github.com/metosin/reitit"
|
:url "https://github.com/metosin/reitit"
|
||||||
:license {:name "Eclipse Public License"
|
:license {:name "Eclipse Public License"
|
||||||
|
|
|
||||||
17
project.clj
17
project.clj
|
|
@ -1,4 +1,4 @@
|
||||||
(defproject metosin/reitit-parent "0.1.1-SNAPSHOT"
|
(defproject metosin/reitit-parent "0.1.1"
|
||||||
:description "Snappy data-driven router for Clojure(Script)"
|
:description "Snappy data-driven router for Clojure(Script)"
|
||||||
:url "https://github.com/metosin/reitit"
|
:url "https://github.com/metosin/reitit"
|
||||||
:license {:name "Eclipse Public License"
|
:license {:name "Eclipse Public License"
|
||||||
|
|
@ -9,13 +9,13 @@
|
||||||
:source-uri "https://github.com/metosin/reitit/{version}/{filepath}#L{line}"
|
:source-uri "https://github.com/metosin/reitit/{version}/{filepath}#L{line}"
|
||||||
:metadata {:doc/format :markdown}}
|
:metadata {:doc/format :markdown}}
|
||||||
|
|
||||||
:managed-dependencies [[metosin/reitit "0.1.1-SNAPSHOT"]
|
:managed-dependencies [[metosin/reitit "0.1.1"]
|
||||||
[metosin/reitit-core "0.1.1-SNAPSHOT"]
|
[metosin/reitit-core "0.1.1"]
|
||||||
[metosin/reitit-ring "0.1.1-SNAPSHOT"]
|
[metosin/reitit-ring "0.1.1"]
|
||||||
[metosin/reitit-spec "0.1.1-SNAPSHOT"]
|
[metosin/reitit-spec "0.1.1"]
|
||||||
[metosin/reitit-schema "0.1.1-SNAPSHOT"]
|
[metosin/reitit-schema "0.1.1"]
|
||||||
[metosin/reitit-swagger "0.1.1-SNAPSHOT"]
|
[metosin/reitit-swagger "0.1.1"]
|
||||||
[metosin/reitit-swagger-ui "0.1.1-SNAPSHOT"]
|
[metosin/reitit-swagger-ui "0.1.1"]
|
||||||
|
|
||||||
[meta-merge "1.0.0"]
|
[meta-merge "1.0.0"]
|
||||||
[ring/ring-core "1.6.3"]
|
[ring/ring-core "1.6.3"]
|
||||||
|
|
@ -53,6 +53,7 @@
|
||||||
[orchestra "2017.11.12-1"]
|
[orchestra "2017.11.12-1"]
|
||||||
|
|
||||||
[ring "1.6.3"]
|
[ring "1.6.3"]
|
||||||
|
[ikitommi/immutant-web "3.0.0-alpha1"]
|
||||||
[metosin/muuntaja "0.5.0"]
|
[metosin/muuntaja "0.5.0"]
|
||||||
[metosin/jsonista "0.2.0"]
|
[metosin/jsonista "0.2.0"]
|
||||||
[metosin/ring-swagger-ui "2.2.10"]
|
[metosin/ring-swagger-ui "2.2.10"]
|
||||||
|
|
|
||||||
|
|
@ -284,7 +284,7 @@
|
||||||
(ring/create-resource-handler {:path "/files"})
|
(ring/create-resource-handler {:path "/files"})
|
||||||
(ring/create-resource-handler {:path "/"})
|
(ring/create-resource-handler {:path "/"})
|
||||||
(ring/create-default-handler)))]]
|
(ring/create-default-handler)))]]
|
||||||
prefix ["/" "/files"]
|
prefix ["" "/" "/files" "/files/"]
|
||||||
:let [request (fn [uri] {:uri (str prefix uri), :request-method :get})]]
|
:let [request (fn [uri] {:uri (str prefix uri), :request-method :get})]]
|
||||||
|
|
||||||
(testing test
|
(testing test
|
||||||
|
|
@ -300,6 +300,10 @@
|
||||||
|
|
||||||
(testing "index-files"
|
(testing "index-files"
|
||||||
(let [response (app (request "/docs"))]
|
(let [response (app (request "/docs"))]
|
||||||
|
(is (= "text/html" (get-in response [:headers "Content-Type"])))
|
||||||
|
(is (get-in response [:headers "Last-Modified"]))
|
||||||
|
(is (= "<h1>hello</h1>\n" (slurp (:body response)))))
|
||||||
|
(let [response (app (request "/docs/"))]
|
||||||
(is (= "text/html" (get-in response [:headers "Content-Type"])))
|
(is (= "text/html" (get-in response [:headers "Content-Type"])))
|
||||||
(is (get-in response [:headers "Last-Modified"]))
|
(is (get-in response [:headers "Last-Modified"]))
|
||||||
(is (= "<h1>hello</h1>\n" (slurp (:body response))))))
|
(is (= "<h1>hello</h1>\n" (slurp (:body response))))))
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue