## UNRELEASED ## `reitit-core` * **BREAKING**: the router option key to extract body format has been renamed: `:extract-request-format` => `:reitit.coercion/extract-request-format` * should only concern you if you are not using [Muuntaja](https://github.com/metosin/muuntaja). ## `reitit-swagger-ui` * **BREAKING**: pass swagger-ui `:config` as-is (instead of mixed-casing keys) to swagger-ui, fixes [#109](https://github.com/metosin/reitit/issues/109): * see [docs](https://github.com/swagger-api/swagger-ui/tree/2.x#parameters) for available parameters. ```clj (swagger-ui/create-swagger-ui-handler {:path "/" :url "/api/swagger.json" :config {:jsonEditor true :validatorUrl nil}}) ``` ## 0.1.3 (2018-6-25) ## `reitit-core` * `reitit.coercion/coerce!` coerced all parameters found in match, e.g. injecting in `:query-parameters` into `Match` with coerce those too if `:query` coercion is defined. * if response coercion is not defined for a response status, response is still returned * `spec-tools.data-spec/maybe` can be used in spec-coercion. ```clj (def router (reitit.core/router ["/spec" {:coercion reitit.coercion.spec/coercion} ["/:number/:keyword" {:parameters {:path {:number int? :keyword keyword?} :query (ds/maybe {:int int?})}}]] {:compile reitit.coercion/compile-request-coercers})) (-> (reitit.core/match-by-path router "/spec/10/kikka") (assoc :query-params {:int "10"}) (reitit.coercion/coerce!)) ; {:path {:number 10, :keyword :kikka} ; :query {:int 10}} ``` * `reitit.core/match->path` to create full paths from match, including the query parameters: ```clj (require '[reitit.core :as r]) (-> (r/router ["/:a/:b" ::route]) (r/match-by-name! ::route {:a "olipa", :b "kerran"}) (r/match->path)) ; "/olipa/kerran" (-> (r/router ["/:a/:b" ::route]) (r/match-by-name! ::route {:a "olipa", :b "kerran"}) (r/match->path {:iso "pöriläinen"})) ; "/olipa/kerran?iso=p%C3%B6ril%C3%A4inen" ``` ### `reitit-spec` * `[metosin/spec-tools "0.7.1"]` with swagger generation enhancements, see the [CHANGELOG](https://github.com/metosin/spec-tools/blob/master/CHANGELOG.md) * if response coercion is not defined for a response status, no `:schema` is not emitted. * updated dependencies: ```clj [metosin/spec-tools "0.7.1"] is available but we use "0.7.0" ``` ### `reitit-schema` * if response coercion is not defined for a response status, no `:schema` is not emitted. ## 0.1.2 (2018-6-6) ### `reitit-core` * Better handling of `nil` in route syntax: * explicit `nil` after path string is always handled as `nil` route * `nil` as path string causes the whole route to be `nil` * `nil` as child route is stripped away ```clj (testing "nil routes are stripped" (is (= [] (r/routes (r/router nil)))) (is (= [] (r/routes (r/router [nil ["/ping"]])))) (is (= [] (r/routes (r/router [nil [nil] [[nil nil nil]]])))) (is (= [] (r/routes (r/router ["/ping" [nil "/pong"]]))))) ``` ### `reitit-ring` * Use HTTP redirect (302) with index-files in `reitit.ring/create-resource-handler`. * `reitit.ring/create-default-handler` now conforms to [RING Spec](https://github.com/ring-clojure/ring/blob/master/SPEC), Fixes [#83](https://github.com/metosin/reitit/issues/83) ### `reitit-schema` * updated dependencies: ```clj [metosin/schema-tools "0.10.3"] is available but we use "0.10.2" ``` ### `reitit-swagger` * Fix Swagger-paths, by [Kirill Chernyshov](https://github.com/DeLaGuardo). ### `reitit-swagger-ui` * Use HTTP redirect (302) with index-files in `reitit.swagger-ui/create-swagger-ui-handler`. * updated dependencies: ```clj [metosin/jsonista "0.2.1"] is available but we use "0.2.0" ``` ## 0.1.1 (2018-5-20) ### `reitit-core` * `linear-router` now works with unnamed catch-all parameters, e.g. `"/files/*"` * `match-by-path` encodes parameters into strings using (internal) `reitit.impl/IntoString` protocol. Handles all of: strings, numbers, keywords, booleans, objects. Fixes [#75](https://github.com/metosin/reitit/issues/75). ```clj (require '[reitit.core :as r]) (r/match-by-name (r/router ["/coffee/:type" ::coffee]) ::coffee {:type :luwak}) ;#Match{:template "/coffee/:type", ; :data {:name :user/coffee}, ; :result nil, ; :path-params {:type "luwak"}, ; :path "/coffee/luwak"} ``` ### `reitit-ring` * `reitit.ring/default-handler` now works correctly with async ring * new helper `reitit.ring/router` to compose routes outside of a router. * `reitit.ring/create-resource-handler` function to serve static routes. See [docs](https://metosin.github.io/reitit/ring/static.html). * new dependencies: ```clj [ring/ring-core "1.6.3"] ``` ### `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) and [example project](https://github.com/metosin/reitit/tree/master/examples/ring-swagger). ### `reitit-swagger-ui` New module to server pre-integrated [Swagger-ui](https://github.com/swagger-api/swagger-ui). See [docs](https://metosin.github.io/reitit/ring/swagger.html#swagger-ui). * new dependencies: ```clj [metosin/jsonista "0.2.0"] [metosin/ring-swagger-ui "2.2.10"] ``` ### dependencies ```clj [metosin/spec-tools "0.7.0"] is available but we use "0.6.1" [metosin/schema-tools "0.10.2"] is available but we use "0.10.1" ``` ## 0.1.0 (2018-2-19) * First release