mirror of
https://github.com/metosin/reitit.git
synced 2025-12-17 08:21:11 +00:00
replace deep-merge with meta-merge
This commit is contained in:
parent
b4ceaf1318
commit
6eecc048be
3 changed files with 11 additions and 27 deletions
|
|
@ -11,6 +11,8 @@
|
|||
:source-uri "https://github.com/metosin/reitit/{version}/{filepath}#L{line}"
|
||||
:metadata {:doc/format :markdown}}
|
||||
|
||||
:dependencies [[meta-merge "1.0.0"]]
|
||||
|
||||
:profiles {:dev {:plugins [[jonase/eastwood "0.2.3"]
|
||||
[lein-tach "0.3.0"]
|
||||
[lein-doo "0.1.7"]
|
||||
|
|
|
|||
|
|
@ -1,18 +1,5 @@
|
|||
(ns reitit.core)
|
||||
|
||||
(defn- deep-merge [& values]
|
||||
(let [[values strategy] (if (keyword? (first values))
|
||||
[(rest values) (first values)]
|
||||
[values :replace])]
|
||||
(cond
|
||||
(every? map? values)
|
||||
(apply merge-with (partial deep-merge strategy) values)
|
||||
|
||||
(and (= strategy :into) (every? coll? values))
|
||||
(reduce into values)
|
||||
|
||||
:else
|
||||
(last values))))
|
||||
(ns reitit.core
|
||||
(:require [meta-merge.core :refer [meta-merge]]))
|
||||
|
||||
(defprotocol ExpandArgs
|
||||
(expand [this]))
|
||||
|
|
@ -54,16 +41,11 @@
|
|||
(defn map-meta [f routes]
|
||||
(mapv #(update % 1 f) routes))
|
||||
|
||||
(defn merge-meta [key-strategy x]
|
||||
(defn merge-meta [x]
|
||||
(reduce
|
||||
(fn [acc [k v]]
|
||||
(let [strategy (or (key-strategy k) :replace)]
|
||||
(deep-merge strategy acc {k v})))
|
||||
{}
|
||||
x))
|
||||
(meta-merge acc {k v}))
|
||||
{} x))
|
||||
|
||||
(defn resolve-routes
|
||||
([x]
|
||||
(resolve-routes (constantly :replace) x))
|
||||
([key-strategy x]
|
||||
(->> x (walk) (map-meta (partial merge-meta key-strategy)))))
|
||||
(defn resolve-routes [x]
|
||||
(->> x (walk) (map-meta merge-meta)))
|
||||
|
|
|
|||
|
|
@ -20,11 +20,11 @@
|
|||
["/:sub-id" {:parameters {:sub-id String}}]]
|
||||
["/pong"]
|
||||
["/admin" {:mw [:admin] :roles #{:admin}}
|
||||
["/user" {:roles #{:user}}]
|
||||
["/user" {:roles ^:replace #{:user}}]
|
||||
["/db" {:mw [:db]}]]]
|
||||
expected [["/api/ping" {:mw [:api], :handler :kikka}]
|
||||
["/api/user/:id/:sub-id" {:mw [:api], :parameters {:id String, :sub-id String}}]
|
||||
["/api/pong" {:mw [:api]}]
|
||||
["/api/admin/user" {:mw [:api :admin], :roles #{:user}}]
|
||||
["/api/admin/db" {:mw [:api :admin :db], :roles #{:admin}}]]]
|
||||
(is (= expected (reitit/resolve-routes {:mw :into} routes))))))
|
||||
(is (= expected (reitit/resolve-routes routes))))))
|
||||
|
|
|
|||
Loading…
Reference in a new issue