Compare commits

...

13 commits

Author SHA1 Message Date
Joel Kaasinen
d25dca19f6 chore: disable release signing harder
Some checks failed
testsuite / Clojure (Java 11) (push) Has been cancelled
testsuite / Clojure (Java 17) (push) Has been cancelled
testsuite / Clojure (Java 21) (push) Has been cancelled
testsuite / ClojureScript (push) Has been cancelled
testsuite / Lint cljdoc.edn (push) Has been cancelled
testsuite / Check cljdoc analysis (push) Has been cancelled
2025-10-24 16:14:11 +03:00
Joel Kaasinen
1b02662c78 chore: disable release signing
now that we have automated releases, there's no point
2025-10-24 16:08:19 +03:00
Joel Kaasinen
36af88b65e doc: update release instructions 2025-10-24 16:08:08 +03:00
Joel Kaasinen
152c598858 Release 0.9.2-rc1 2025-10-24 15:52:47 +03:00
Joel Kaasinen
6d9632e85e chore: automated release pipeline 2025-10-24 15:45:42 +03:00
Joel Kaasinen
5ff8ba2e3e
Merge pull request #761 from metosin/bump-deps
bump deps
2025-10-24 15:45:27 +03:00
Joel Kaasinen
c684c83c99 chore: update openapi-schema-validator, fix test
validator now disallows having both "example" and "examples"
2025-10-24 15:38:29 +03:00
Joel Kaasinen
defebb0f1f chore: upgrade dependencies
... and pin pedestal versions since we don't work with 0.7/0.8
2025-10-24 15:31:39 +03:00
Joel Kaasinen
54c0935078 doc: updating deps 2025-10-24 15:26:20 +03:00
Joel Kaasinen
cde050f964 doc: remove old TODO 2025-10-24 14:24:38 +03:00
Joel Kaasinen
560c6d7969 doc: update CHANGELOG.md 2025-10-24 14:16:59 +03:00
Joel Kaasinen
abe95bfc17
Merge pull request #760 from metosin/fix/758-match-by-name-bang-nil
fix: match-by-name! should throw when match-by-name is PartialMatch
2025-10-24 14:15:37 +03:00
Joel Kaasinen
d2f44b8015 fix: match-by-name! should throw when match-by-name is PartialMatch
If a path param was nil, match-by-name (via impl/path-for) was
treating the parameter as missing, but match-by-name!
(via impl/throw-on-missing-path-params) was treating it as present.

That is:

(reitit/match-by-name router :page {:id "1"}) ;; => Match
(reitit/match-by-name router :page) ;; => PartialMatch
(reitit/match-by-name router :page {:id nil}) ;; => PartialMatch

(reitit/match-by-name! router :page {:id "1"}) ;; => Match
(reitit/match-by-name! router :page) ;; => ExceptionInfo: missing path-params for route /pages/:id -> #{:id}
(reitit/match-by-name! router :page {:id nil}) ;; => nil  !!!

fixes #758
2025-10-24 09:58:03 +03:00
58 changed files with 858 additions and 1611 deletions

26
.github/workflows/release.yml vendored Normal file
View file

@ -0,0 +1,26 @@
name: Release
on:
release:
types:
- published # reacts to releases and prereleases, but not their drafts
jobs:
build-and-release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- name: "Setup Java"
uses: actions/setup-java@v5
with:
distribution: zulu
java-version: 11
- name: "Setup Clojure"
uses: DeLaGuardo/setup-clojure@master
with:
lein: 2.9.5
- name: Deploy to Clojars
run: ./scripts/lein-modules do clean, deploy clojars
env:
CLOJARS_USERNAME: metosinci
CLOJARS_PASSWORD: "${{ secrets.CLOJARS_DEPLOY_TOKEN }}"

View file

@ -12,12 +12,25 @@ We use [Break Versioning][breakver]. The version numbers follow a `<major>.<mino
[breakver]: https://github.com/ptaoussanis/encore/blob/master/BREAK-VERSIONING.md
## Unreleased
## 0.9.2-rc1 (2025-10-24)
* Allow multimethods as handlers when validating [#755](https://github.com/metosin/reitit/pull/755)
* Improve error reporting when generating OpenAPI fails [#754](https://github.com/metosin/reitit/pull/754)
* Allow middleware registry to be used when defining middleware in `ring-handler`. See [docs](./doc/ring/middleware_registry.md). [#739](https://github.com/metosin/reitit/pull/739)
* Allow passing options (eg. `:malli.transform/add-optional-keys`) to malli's `default-value-transformer`. See [docs](./doc/coercion/malli_coercion.md). [#756](https://github.com/metosin/reitit/pull/756)
* **FIX**: `match-by-name!` returning `nil` instead of throwing an exception for some partial matches [#758](https://github.com/metosin/reitit/issues/758)
* Updated dependencies:
```
[com.fasterxml.jackson.core/jackson-core "2.20.0"] is available but we use "2.18.2"
[com.fasterxml.jackson.core/jackson-databind "2.20.0"] is available but we use "2.18.2"
[compojure "1.7.2"] is available but we use "1.7.1"
[fipp "0.6.29"] is available but we use "0.6.27"
[metosin/malli "0.19.2"] is available but we use "0.18.0"
[ring "1.15.3"] is available but we use "1.14.1"
[ring/ring-core "1.15.3"] is available but we use "1.14.1"
[ring/ring-defaults "0.7.0"] is available but we use "0.6.0"
```
## 0.9.1 (2025-05-27)

View file

@ -66,7 +66,7 @@ modules will continue to be released under `metosin` for compatibility purposes.
All main modules bundled:
```clj
[metosin/reitit "0.9.1"]
[metosin/reitit "0.9.2-rc1"]
```
Optionally, the parts can be required separately.

View file

@ -41,7 +41,7 @@ There is [#reitit](https://clojurians.slack.com/messages/reitit/) in [Clojurians
All bundled:
```clj
[metosin/reitit "0.9.1"]
[metosin/reitit "0.9.2-rc1"]
```
Optionally, the parts can be required separately.

View file

@ -22,7 +22,7 @@ The default exception formatting uses `reitit.exception/exception`. It produces
## Pretty Errors
```clj
[metosin/reitit-dev "0.9.1"]
[metosin/reitit-dev "0.9.2-rc1"]
```
For human-readable and developer-friendly exception messages, there is `reitit.dev.pretty/exception` (in the `reitit-dev` module). It is inspired by the lovely errors messages of [ELM](https://elm-lang.org/blog/compiler-errors-for-humans) and [ETA](https://twitter.com/jyothsnasrin/status/1037703436043603968) and uses [fipp](https://github.com/brandonbloom/fipp), [expound](https://github.com/bhb/expound) and [spell-spec](https://github.com/bhauman/spell-spec) for most of heavy lifting.

View file

@ -25,6 +25,14 @@ clojure-lsp clean-ns
The documentation lives under `doc` and it is hosted on [cljdoc](https://cljdoc.org). See their
documentation for [library authors](https://github.com/cljdoc/cljdoc/blob/master/doc/userguide/for-library-authors.adoc)
## Updating deps
* `lein ancient upgrade`
* Mention non-dev non-test dep upgrades in CHANGELOG.md
* `npm update --save`
* Make a PR, run CI
## Making a release
We use [Break Versioning][breakver]. Remember our promise: patch-level bumps never include breaking changes!
@ -32,25 +40,20 @@ We use [Break Versioning][breakver]. Remember our promise: patch-level bumps nev
[breakver]: https://github.com/ptaoussanis/encore/blob/master/BREAK-VERSIONING.md
```bash
# new version
# create a release commit
./scripts/set-version "1.0.0"
# create a release commit and a tag
git add -u
# !!! update the changelog
git add -u
git commit -m "Release 1.0.0"
git tag 1.0.0
# works
./scripts/lein-modules install
lein test
# deploy to clojars
CLOJARS_USERNAME=*** CLOJARS_PASSWORD=*** ./scripts/lein-modules do clean, deploy clojars
# push the commit and the tag
# push the commit
git push
git push --tags
# !!! check that tests pass on CI
```
* Remembor to update the changelog!
* Create a new release on github at <https://github.com/metosin/reitit/releases>
* This will trigger the automated release workflow <https://github.com/metosin/reitit/actions/workflows/release.yml>
* Announce the release at least on #reitit in Clojurians.

View file

@ -1,7 +1,7 @@
# Default Interceptors
```clj
[metosin/reitit-interceptors "0.9.1"]
[metosin/reitit-interceptors "0.9.2-rc1"]
```
Just like the [ring default middleware](../ring/default_middleware.md), but for interceptors.

View file

@ -5,7 +5,7 @@ Reitit has also support for [interceptors](http://pedestal.io/reference/intercep
## Reitit-http
```clj
[metosin/reitit-http "0.9.1"]
[metosin/reitit-http "0.9.2-rc1"]
```
A module for http-routing using interceptors instead of middleware. Builds on top of the [`reitit-ring`](../ring/ring.md) module having all the same features.

View file

@ -3,7 +3,7 @@
[Pedestal](http://pedestal.io/) is a backend web framework for Clojure. `reitit-pedestal` provides an alternative routing engine for Pedestal.
```clj
[metosin/reitit-pedestal "0.9.1"]
[metosin/reitit-pedestal "0.9.2-rc1"]
```
Why should one use reitit instead of the Pedestal [default routing](http://pedestal.io/reference/routing-quick-reference)?
@ -26,8 +26,8 @@ A minimalistic example on how to to swap the default-router with a reitit router
```clj
; [io.pedestal/pedestal.service "0.5.5"]
; [io.pedestal/pedestal.jetty "0.5.5"]
; [metosin/reitit-pedestal "0.9.1"]
; [metosin/reitit "0.9.1"]
; [metosin/reitit-pedestal "0.9.2-rc1"]
; [metosin/reitit "0.9.2-rc1"]
(require '[io.pedestal.http :as server])
(require '[reitit.pedestal :as pedestal])

View file

@ -1,7 +1,7 @@
# Sieppari
```clj
[metosin/reitit-sieppari "0.9.1"]
[metosin/reitit-sieppari "0.9.2-rc1"]
```
[Sieppari](https://github.com/metosin/sieppari) is a new and fast interceptor implementation for Clojure, with pluggable async supporting [core.async](https://github.com/clojure/core.async), [Manifold](https://github.com/ztellman/manifold) and [Promesa](http://funcool.github.io/promesa/latest).

View file

@ -65,7 +65,7 @@ There is an extra option in http-router (actually, in the underlying interceptor
### Printing Context Diffs
```clj
[metosin/reitit-interceptors "0.9.1"]
[metosin/reitit-interceptors "0.9.2-rc1"]
```
Using `reitit.http.interceptors.dev/print-context-diffs` transformation, the context diffs between each interceptor are printed out to the console. To use it, add the following router option:

View file

@ -1,7 +1,7 @@
# Default Middleware
```clj
[metosin/reitit-middleware "0.9.1"]
[metosin/reitit-middleware "0.9.2-rc1"]
```
Any Ring middleware can be used with `reitit-ring`, but using data-driven middleware is preferred as they are easier to manage and in many cases yield better performance. `reitit-middleware` contains a set of common ring middleware, lifted into data-driven middleware.

View file

@ -1,7 +1,7 @@
# Exception Handling with Ring
```clj
[metosin/reitit-middleware "0.9.1"]
[metosin/reitit-middleware "0.9.2-rc1"]
```
Exceptions thrown in router creation can be [handled with custom exception handler](../basics/error_messages.md). By default, exceptions thrown at runtime from a handler or a middleware are not caught by the `reitit.ring/ring-handler`. A good practice is to have a top-level exception handler to log and format errors for clients.

View file

@ -5,7 +5,7 @@
Read more about the [Ring Concepts](https://github.com/ring-clojure/ring/wiki/Concepts).
```clj
[metosin/reitit-ring "0.9.1"]
[metosin/reitit-ring "0.9.2-rc1"]
```
## `reitit.ring/router`

View file

@ -1,7 +1,7 @@
# Swagger Support
```
[metosin/reitit-swagger "0.9.1"]
[metosin/reitit-swagger "0.9.2-rc1"]
```
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.
@ -47,7 +47,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 specification. To make things easy, there is a pre-integrated version of the swagger-ui as a separate module.
```
[metosin/reitit-swagger-ui "0.9.1"]
[metosin/reitit-swagger-ui "0.9.2-rc1"]
```
`reitit.swagger-ui/create-swagger-ui-handler` can be used to create a ring-handler to serve the swagger-ui. It accepts the following options:

View file

@ -59,7 +59,7 @@ There is an extra option in the Ring router (actually, in the underlying middlew
### Printing Request Diffs
```clj
[metosin/reitit-middleware "0.9.1"]
[metosin/reitit-middleware "0.9.2-rc1"]
```
Using `reitit.ring.middleware.dev/print-request-diffs` transformation, the request diffs between each middleware are printed out to the console. To use it, add the following router option:

View file

@ -2,6 +2,6 @@
:description "Reitit Buddy Auth App"
:dependencies [[org.clojure/clojure "1.11.2"]
[ring/ring-jetty-adapter "1.12.1"]
[metosin/reitit "0.9.1"]
[metosin/reitit "0.9.2-rc1"]
[buddy "2.0.0"]]
:repl-options {:init-ns example.server})

View file

@ -10,9 +10,9 @@
[ring "1.12.1"]
[hiccup "1.0.5"]
[org.clojure/clojurescript "1.11.132"]
[metosin/reitit "0.9.1"]
[metosin/reitit-schema "0.9.1"]
[metosin/reitit-frontend "0.9.1"]
[metosin/reitit "0.9.2-rc1"]
[metosin/reitit-schema "0.9.2-rc1"]
[metosin/reitit-frontend "0.9.2-rc1"]
[cljsjs/react "17.0.2-0"]
[cljsjs/react-dom "17.0.2-0"]
;; Just for pretty printting the match

View file

@ -10,9 +10,9 @@
[ring "1.12.1"]
[hiccup "1.0.5"]
[org.clojure/clojurescript "1.11.132"]
[metosin/reitit "0.9.1"]
[metosin/reitit-schema "0.9.1"]
[metosin/reitit-frontend "0.9.1"]
[metosin/reitit "0.9.2-rc1"]
[metosin/reitit-schema "0.9.2-rc1"]
[metosin/reitit-frontend "0.9.2-rc1"]
[cljsjs/react "17.0.2-0"]
[cljsjs/react-dom "17.0.2-0"]
;; Just for pretty printting the match

View file

@ -10,9 +10,9 @@
[ring "1.12.1"]
[hiccup "1.0.5"]
[org.clojure/clojurescript "1.10.520"]
[metosin/reitit "0.9.1"]
[metosin/reitit-spec "0.9.1"]
[metosin/reitit-frontend "0.9.1"]
[metosin/reitit "0.9.2-rc1"]
[metosin/reitit-spec "0.9.2-rc1"]
[metosin/reitit-frontend "0.9.2-rc1"]
[cljsjs/react "17.0.2-0"]
[cljsjs/react-dom "17.0.2-0"]
;; Just for pretty printting the match

View file

@ -10,9 +10,9 @@
[ring "1.12.1"]
[hiccup "1.0.5"]
[org.clojure/clojurescript "1.11.132"]
[metosin/reitit "0.9.1"]
[metosin/reitit-malli "0.9.1"]
[metosin/reitit-frontend "0.9.1"]
[metosin/reitit "0.9.2-rc1"]
[metosin/reitit-malli "0.9.2-rc1"]
[metosin/reitit-frontend "0.9.2-rc1"]
[cljsjs/react "17.0.2-0"]
[cljsjs/react-dom "17.0.2-0"]
;; Just for pretty printting the match

View file

@ -10,9 +10,9 @@
[ring "1.12.1"]
[hiccup "1.0.5"]
[org.clojure/clojurescript "1.11.132"]
[metosin/reitit "0.9.1"]
[metosin/reitit-spec "0.9.1"]
[metosin/reitit-frontend "0.9.1"]
[metosin/reitit "0.9.2-rc1"]
[metosin/reitit-spec "0.9.2-rc1"]
[metosin/reitit-frontend "0.9.2-rc1"]
[cljsjs/react "17.0.2-0"]
[cljsjs/react-dom "17.0.2-0"]
;; Just for pretty printting the match

View file

@ -1,7 +1,7 @@
(defproject frontend-re-frame "0.1.0-SNAPSHOT"
:dependencies [[org.clojure/clojure "1.11.2"]
[org.clojure/clojurescript "1.11.132"]
[metosin/reitit "0.9.1"]
[metosin/reitit "0.9.2-rc1"]
[reagent "1.2.0"]
[re-frame "0.10.6"]
[cljsjs/react "17.0.2-0"]

View file

@ -10,9 +10,9 @@
[ring "1.12.1"]
[hiccup "1.0.5"]
[org.clojure/clojurescript "1.11.132"]
[metosin/reitit "0.9.1"]
[metosin/reitit-spec "0.9.1"]
[metosin/reitit-frontend "0.9.1"]
[metosin/reitit "0.9.2-rc1"]
[metosin/reitit-spec "0.9.2-rc1"]
[metosin/reitit-frontend "0.9.2-rc1"]
[cljsjs/react "17.0.2-0"]
[cljsjs/react-dom "17.0.2-0"]
;; Just for pretty printting the match

View file

@ -3,6 +3,6 @@
:dependencies [[org.clojure/clojure "1.11.2"]
[ring/ring-jetty-adapter "1.12.1"]
[aleph "0.7.1"]
[metosin/reitit "0.9.1"]
[metosin/reitit "0.9.2-rc1"]
[metosin/ring-swagger-ui "5.9.0"]]
:repl-options {:init-ns example.server})

View file

@ -5,5 +5,5 @@
[funcool/promesa "11.0.678"]
[manifold "0.4.2"]
[ring/ring-jetty-adapter "1.12.1"]
[metosin/reitit "0.9.1"]]
[metosin/reitit "0.9.2-rc1"]]
:repl-options {:init-ns example.server})

View file

@ -2,4 +2,4 @@
:description "Reitit coercion with vanilla ring"
:dependencies [[org.clojure/clojure "1.11.2"]
[ring/ring-jetty-adapter "1.12.1"]
[metosin/reitit "0.9.1"]])
[metosin/reitit "0.9.2-rc1"]])

View file

@ -3,7 +3,7 @@
:dependencies [[org.clojure/clojure "1.11.2"]
[metosin/jsonista "0.3.8"]
[ring/ring-jetty-adapter "1.12.1"]
[metosin/reitit "0.9.1"]
[metosin/reitit "0.9.2-rc1"]
[metosin/ring-swagger-ui "5.9.0"]]
:repl-options {:init-ns example.server}
:profiles {:dev {:dependencies [[ring/ring-mock "0.4.0"]]}})

View file

@ -3,7 +3,7 @@
:dependencies [[org.clojure/clojure "1.11.2"]
[io.pedestal/pedestal.service "0.6.3"]
[io.pedestal/pedestal.jetty "0.6.3"]
[metosin/reitit-malli "0.9.1"]
[metosin/reitit-pedestal "0.9.1"]
[metosin/reitit "0.9.1"]]
[metosin/reitit-malli "0.9.2-rc1"]
[metosin/reitit-pedestal "0.9.2-rc1"]
[metosin/reitit "0.9.2-rc1"]]
:repl-options {:init-ns server})

View file

@ -3,6 +3,6 @@
:dependencies [[org.clojure/clojure "1.11.2"]
[io.pedestal/pedestal.service "0.6.3"]
[io.pedestal/pedestal.jetty "0.6.3"]
[metosin/reitit-pedestal "0.9.1"]
[metosin/reitit "0.9.1"]]
[metosin/reitit-pedestal "0.9.2-rc1"]
[metosin/reitit "0.9.2-rc1"]]
:repl-options {:init-ns example.server})

View file

@ -3,6 +3,6 @@
:dependencies [[org.clojure/clojure "1.11.2"]
[io.pedestal/pedestal.service "0.6.3"]
[io.pedestal/pedestal.jetty "0.6.3"]
[metosin/reitit-pedestal "0.9.1"]
[metosin/reitit "0.9.1"]]
[metosin/reitit-pedestal "0.9.2-rc1"]
[metosin/reitit "0.9.2-rc1"]]
:repl-options {:init-ns example.server})

View file

@ -2,5 +2,5 @@
:description "Reitit Ring App"
:dependencies [[org.clojure/clojure "1.11.2"]
[ring/ring-jetty-adapter "1.12.1"]
[metosin/reitit "0.9.1"]]
[metosin/reitit "0.9.2-rc1"]]
:repl-options {:init-ns example.server})

View file

@ -2,7 +2,7 @@
:description "Reitit Ring App with Integrant"
:dependencies [[org.clojure/clojure "1.11.2"]
[ring/ring-jetty-adapter "1.12.1"]
[metosin/reitit "0.9.1"]
[metosin/reitit "0.9.2-rc1"]
[integrant "0.8.1"]]
:main example.server
:repl-options {:init-ns user}

View file

@ -3,6 +3,6 @@
:dependencies [[org.clojure/clojure "1.11.2"]
[metosin/jsonista "0.3.8"]
[ring/ring-jetty-adapter "1.12.1"]
[metosin/reitit "0.9.1"]]
[metosin/reitit "0.9.2-rc1"]]
:repl-options {:init-ns example.server}
:profiles {:dev {:dependencies [[ring/ring-mock "0.4.0"]]}})

View file

@ -3,7 +3,7 @@
:dependencies [[org.clojure/clojure "1.11.2"]
[metosin/jsonista "0.3.8"]
[ring/ring-jetty-adapter "1.12.1"]
[metosin/reitit "0.9.1"]
[metosin/reitit "0.9.2-rc1"]
[metosin/ring-swagger-ui "5.9.0"]]
:repl-options {:init-ns example.server}
:profiles {:dev {:dependencies [[ring/ring-mock "0.4.0"]]}})

View file

@ -2,7 +2,7 @@
:description "Reitit Ring App with Swagger"
:dependencies [[org.clojure/clojure "1.11.2"]
[ring/ring-jetty-adapter "1.12.1"]
[metosin/reitit "0.9.1"]
[metosin/reitit "0.9.2-rc1"]
[metosin/ring-swagger-ui "5.9.0"]]
:repl-options {:init-ns example.server}
:profiles {:dev {:dependencies [[ring/ring-mock "0.4.0"]]}})

View file

@ -1,4 +1,4 @@
(defproject metosin/reitit-core "0.9.1"
(defproject metosin/reitit-core "0.9.2-rc1"
:description "Snappy data-driven router for Clojure(Script)"
:url "https://github.com/metosin/reitit"
:license {:name "Eclipse Public License"

View file

@ -198,9 +198,8 @@
(:path route)))
(defn throw-on-missing-path-params [template required path-params]
(when-not (every? #(contains? path-params %) required)
(let [defined (-> path-params keys set)
missing (set/difference required defined)]
(let [missing (set (remove #(get path-params %) required))]
(when-not (empty? missing)
(ex/fail!
(str "missing path-params for route " template " -> " missing)
{:path-params path-params, :required required}))))

View file

@ -1,4 +1,4 @@
(defproject metosin/reitit-dev "0.9.1"
(defproject metosin/reitit-dev "0.9.2-rc1"
:description "Snappy data-driven router for Clojure(Script)"
:url "https://github.com/metosin/reitit"
:license {:name "Eclipse Public License"

View file

@ -1,4 +1,4 @@
(defproject metosin/reitit-frontend "0.9.1"
(defproject metosin/reitit-frontend "0.9.2-rc1"
:description "Reitit: Clojurescript frontend routing core"
:url "https://github.com/metosin/reitit"
:license {:name "Eclipse Public License"

View file

@ -1,4 +1,4 @@
(defproject metosin/reitit-http "0.9.1"
(defproject metosin/reitit-http "0.9.2-rc1"
:description "Reitit: HTTP routing with interceptors"
:url "https://github.com/metosin/reitit"
:license {:name "Eclipse Public License"

View file

@ -1,4 +1,4 @@
(defproject metosin/reitit-interceptors "0.9.1"
(defproject metosin/reitit-interceptors "0.9.2-rc1"
:description "Reitit, common interceptors bundled"
:url "https://github.com/metosin/reitit"
:license {:name "Eclipse Public License"

View file

@ -1,4 +1,4 @@
(defproject metosin/reitit-malli "0.9.1"
(defproject metosin/reitit-malli "0.9.2-rc1"
:description "Reitit: Malli coercion"
:url "https://github.com/metosin/reitit"
:license {:name "Eclipse Public License"

View file

@ -1,4 +1,4 @@
(defproject metosin/reitit-middleware "0.9.1"
(defproject metosin/reitit-middleware "0.9.2-rc1"
:description "Reitit, common middleware bundled"
:url "https://github.com/metosin/reitit"
:license {:name "Eclipse Public License"

View file

@ -1,4 +1,4 @@
(defproject fi.metosin/reitit-openapi "0.9.1"
(defproject fi.metosin/reitit-openapi "0.9.2-rc1"
:description "Reitit: OpenAPI-support"
:url "https://github.com/metosin/reitit"
:license {:name "Eclipse Public License"

View file

@ -1,4 +1,4 @@
(defproject metosin/reitit-pedestal "0.9.1"
(defproject metosin/reitit-pedestal "0.9.2-rc1"
:description "Reitit + Pedestal Integration"
:url "https://github.com/metosin/reitit"
:license {:name "Eclipse Public License"

View file

@ -1,4 +1,4 @@
(defproject metosin/reitit-ring "0.9.1"
(defproject metosin/reitit-ring "0.9.2-rc1"
:description "Reitit: Ring routing"
:url "https://github.com/metosin/reitit"
:license {:name "Eclipse Public License"

View file

@ -1,4 +1,4 @@
(defproject metosin/reitit-schema "0.9.1"
(defproject metosin/reitit-schema "0.9.2-rc1"
:description "Reitit: Plumatic Schema coercion"
:url "https://github.com/metosin/reitit"
:license {:name "Eclipse Public License"

View file

@ -1,4 +1,4 @@
(defproject metosin/reitit-sieppari "0.9.1"
(defproject metosin/reitit-sieppari "0.9.2-rc1"
:description "Reitit: Sieppari Interceptors"
:url "https://github.com/metosin/reitit"
:license {:name "Eclipse Public License"

View file

@ -1,4 +1,4 @@
(defproject metosin/reitit-spec "0.9.1"
(defproject metosin/reitit-spec "0.9.2-rc1"
:description "Reitit: clojure.spec coercion"
:url "https://github.com/metosin/reitit"
:license {:name "Eclipse Public License"

View file

@ -1,4 +1,4 @@
(defproject metosin/reitit-swagger-ui "0.9.1"
(defproject metosin/reitit-swagger-ui "0.9.2-rc1"
:description "Reitit: Swagger-ui support"
:url "https://github.com/metosin/reitit"
:license {:name "Eclipse Public License"

View file

@ -1,4 +1,4 @@
(defproject metosin/reitit-swagger "0.9.1"
(defproject metosin/reitit-swagger "0.9.2-rc1"
:description "Reitit: Swagger-support"
:url "https://github.com/metosin/reitit"
:license {:name "Eclipse Public License"

View file

@ -1,4 +1,4 @@
(defproject metosin/reitit "0.9.1"
(defproject metosin/reitit "0.9.2-rc1"
:description "Snappy data-driven router for Clojure(Script)"
:url "https://github.com/metosin/reitit"
:license {:name "Eclipse Public License"

2145
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -2,13 +2,13 @@
"name": "reitit",
"private": true,
"devDependencies": {
"@seriousme/openapi-schema-validator": "^2.4.0",
"@seriousme/openapi-schema-validator": "^2.7.0",
"karma": "^6.4.4",
"karma-chrome-launcher": "^3.2.0",
"karma-cli": "^2.0.0",
"karma-cljs-test": "^0.1.0"
},
"dependencies": {
"shadow-cljs": "^2.28.22"
"shadow-cljs": "^3.2.1"
}
}

View file

@ -1,4 +1,4 @@
(defproject metosin/reitit-parent "0.9.1"
(defproject metosin/reitit-parent "0.9.2-rc1"
:description "Snappy data-driven router for Clojure(Script)"
:url "https://github.com/metosin/reitit"
:license {:name "Eclipse Public License"
@ -6,7 +6,8 @@
:test-paths ["test/clj" "test/cljc"]
:deploy-repositories [["clojars" {:url "https://repo.clojars.org"
:username :env/clojars_username
:password :env/clojars_password}]]
:password :env/clojars_password
:sign-releases false}]]
:repositories [["clojars" {:url "https://repo.clojars.org"
:username :env/clojars_username
:password :env/clojars_password}]]
@ -15,48 +16,47 @@
:metadata {:doc/format :markdown}}
:scm {:name "git"
:url "https://github.com/metosin/reitit"}
;; TODO: need to verify that the code actually worked with Java1.8, see #242
;; Ring 1.13.1 drops support for Java 1.8 so lets target 11
:javac-options ["-Xlint:unchecked" "-target" "11" "-source" "11"]
:managed-dependencies [[metosin/reitit "0.9.1"]
[metosin/reitit-core "0.9.1"]
[metosin/reitit-dev "0.9.1"]
[metosin/reitit-spec "0.9.1"]
[metosin/reitit-malli "0.9.1"]
[metosin/reitit-schema "0.9.1"]
[metosin/reitit-ring "0.9.1"]
[metosin/reitit-middleware "0.9.1"]
[metosin/reitit-http "0.9.1"]
[metosin/reitit-interceptors "0.9.1"]
[metosin/reitit-swagger "0.9.1"]
[fi.metosin/reitit-openapi "0.9.1"]
[metosin/reitit-swagger-ui "0.9.1"]
[metosin/reitit-frontend "0.9.1"]
[metosin/reitit-sieppari "0.9.1"]
[metosin/reitit-pedestal "0.9.1"]
:managed-dependencies [[metosin/reitit "0.9.2-rc1"]
[metosin/reitit-core "0.9.2-rc1"]
[metosin/reitit-dev "0.9.2-rc1"]
[metosin/reitit-spec "0.9.2-rc1"]
[metosin/reitit-malli "0.9.2-rc1"]
[metosin/reitit-schema "0.9.2-rc1"]
[metosin/reitit-ring "0.9.2-rc1"]
[metosin/reitit-middleware "0.9.2-rc1"]
[metosin/reitit-http "0.9.2-rc1"]
[metosin/reitit-interceptors "0.9.2-rc1"]
[metosin/reitit-swagger "0.9.2-rc1"]
[fi.metosin/reitit-openapi "0.9.2-rc1"]
[metosin/reitit-swagger-ui "0.9.2-rc1"]
[metosin/reitit-frontend "0.9.2-rc1"]
[metosin/reitit-sieppari "0.9.2-rc1"]
[metosin/reitit-pedestal "0.9.2-rc1"]
[metosin/ring-swagger-ui "5.20.0"]
[metosin/spec-tools "0.10.7"]
[metosin/schema-tools "0.13.1"]
[metosin/muuntaja "0.6.11"]
[metosin/jsonista "0.3.13"]
[metosin/sieppari "0.0.0-alpha13"]
[metosin/malli "0.18.0"]
[metosin/malli "0.19.2"]
;; https://clojureverse.org/t/depending-on-the-right-versions-of-jackson-libraries/5111
[com.fasterxml.jackson.core/jackson-core "2.18.2"]
[com.fasterxml.jackson.core/jackson-databind "2.18.2"]
[com.fasterxml.jackson.core/jackson-core "2.20.0"]
[com.fasterxml.jackson.core/jackson-databind "2.20.0"]
[meta-merge "1.0.0"]
[fipp "0.6.27" :exclusions [org.clojure/core.rrb-vector]]
[fipp "0.6.29" :exclusions [org.clojure/core.rrb-vector]]
;; Deep-diff uses this version, override olders versiom from fipp.
[org.clojure/core.rrb-vector "0.2.0"]
[expound "0.9.0"]
[lambdaisland/deep-diff "0.0-47"]
[com.bhauman/spell-spec "0.1.2"]
[mvxcvi/arrangement "2.1.0"]
[ring/ring-core "1.14.1"]
[ring/ring-core "1.15.3"]
[io.pedestal/pedestal.service "0.6.4"]]
[io.pedestal/pedestal.service "0.6.4" :upgrade false]]
:plugins [[jonase/eastwood "1.4.3"]
;[lein-virgil "0.1.7"]
@ -90,8 +90,8 @@
:java-source-paths ["modules/reitit-core/java-src"]
:dependencies [[org.clojure/clojure "1.11.4"]
[thheller/shadow-cljs "2.28.22"]
[org.clojure/clojurescript "1.11.132"]
[thheller/shadow-cljs "3.2.1"]
[org.clojure/clojurescript "1.12.42"]
;; modules dependencies
[metosin/schema-tools "0.13.1"]
@ -99,16 +99,16 @@
[metosin/muuntaja "0.6.11"]
[metosin/sieppari "0.0.0-alpha13"]
[metosin/jsonista "0.3.13"]
[metosin/malli "0.18.0"]
[metosin/malli "0.19.2"]
[lambdaisland/deep-diff "0.0-47"]
[meta-merge "1.0.0"]
[com.bhauman/spell-spec "0.1.2"]
[expound "0.9.0"]
[fipp "0.6.27"]
[fipp "0.6.29"]
[orchestra "2021.01.01-1"]
[ring "1.14.1"]
[ring "1.15.3"]
[ikitommi/immutant-web "3.0.0-alpha1"]
[metosin/ring-http-response "0.9.5"]
[metosin/ring-swagger-ui "5.20.0"]
@ -117,16 +117,17 @@
[criterium "0.4.6"]
[org.clojure/test.check "1.1.1"]
[org.clojure/tools.namespace "1.5.0"]
[com.gfredericks/test.chuck "0.2.14"]
[nubank/matcher-combinators "3.9.1"]
[com.gfredericks/test.chuck "0.2.15"]
[nubank/matcher-combinators "3.9.2"]
[io.pedestal/pedestal.service "0.6.4"]
;; TODO: adapt to breaking changes in pedestal 0.7 and 0.8
[io.pedestal/pedestal.service "0.6.4" :upgrade false]
[org.clojure/core.async "1.7.701"]
[org.clojure/core.async "1.8.741"]
[manifold "0.4.3"]
[funcool/promesa "11.0.678"]
[com.clojure-goes-fast/clj-async-profiler "1.6.1"]
[com.clojure-goes-fast/clj-async-profiler "1.6.2"]
[ring-cors "0.1.13"]
[com.bhauman/rebel-readline "0.1.5"]]}
@ -135,18 +136,18 @@
"-Xmx4096m"
"-Dclojure.compiler.direct-linking=true"]
:test-paths ["perf-test/clj"]
:dependencies [[compojure "1.7.1"]
[ring/ring-defaults "0.6.0"]
:dependencies [[compojure "1.7.2"]
[ring/ring-defaults "0.7.0"]
[ikitommi/immutant-web "3.0.0-alpha1"]
[io.pedestal/pedestal.service "0.6.4"]
[io.pedestal/pedestal.jetty "0.6.4"]
[io.pedestal/pedestal.service "0.6.4" :upgrade false]
[io.pedestal/pedestal.jetty "0.6.4" :upgrade false]
[calfpath "0.8.1"]
[org.clojure/core.async "1.7.701"]
[org.clojure/core.async "1.8.741"]
[manifold "0.4.3"]
[funcool/promesa "11.0.678"]
[metosin/sieppari]
[yada "1.2.16"]
[aleph "0.8.3"]
[aleph "0.9.3"]
[ataraxy "0.4.3"]
[bidi "2.1.6"]
[janus "1.3.2"]]}

View file

@ -13,8 +13,7 @@
(testing "routers handling wildcard paths"
(are [r name]
(testing "wild"
(testing (str name)
(testing "simple"
(let [router (r/router ["/api" ["/ipa" ["/:size" ::beer]]] {:router r})]
(is (= name (r/router-name router)))
@ -52,10 +51,17 @@
:path-params nil})
(r/match-by-name router ::beer)))
(is (r/partial-match? (r/match-by-name router ::beer)))
(is (r/partial-match? (r/match-by-name router ::beer {:size nil}))
"nil counts as missing")
(is (thrown-with-msg?
ExceptionInfo
#"^missing path-params for route /api/ipa/:size -> \#\{:size\}$"
(r/match-by-name! router ::beer))))))
(r/match-by-name! router ::beer)))
(is (thrown-with-msg?
ExceptionInfo
#"^missing path-params for route /api/ipa/:size -> \#\{:size\}$"
(r/match-by-name! router ::beer {:size nil}))
"nil counts as missing"))))
(testing "decode %-encoded path params"
(let [router (r/router [["/one-param-path/:param1" ::one]

View file

@ -901,13 +901,11 @@
:request {:description "body description"
:content {"application/json" {:schema {:x int?, :y int?}
:examples {"1+1" {:value {:x 1, :y 1}}
"1+2" {:value {:x 1, :y 2}}}
:openapi {:example {:x 2, :y 2}}}}}
"1+2" {:value {:x 1, :y 2}}}}}}
:responses {200 {:description "success"
:content {"application/json" {:schema {:total int?}
:examples {"2" {:value {:total 2}}
"3" {:value {:total 3}}}
:openapi {:example {:total 4}}}}}}
"3" {:value {:total 3}}}}}}}
:handler (fn [request]
(let [{:keys [x y]} (-> request :parameters :body)]
{:status 200, :body {:total (+ x y)}}))}}]]]
@ -925,16 +923,14 @@
:required [:x :y],
:additionalProperties false},
:examples {"1+1" {:value {:x 1, :y 1}}
"1+2" {:value {:x 1, :y 2}}},
:example {:x 2, :y 2}}}},
"1+2" {:value {:x 1, :y 2}}}}}},
:responses {200 {:description "success",
:content {"application/json" {:schema {:type "object",
:properties {:total {:type "integer"}},
:required [:total],
:additionalProperties false},
:examples {"2" {:value {:total 2}},
"3" {:value {:total 3}}},
:example {:total 4}}}}},
"3" {:value {:total 3}}}}}}},
:summary "plus with body"}}}
(:paths spec)))
(is (nil? (validate spec))))