Merge pull request #7 from metosin/LookupRouter

Implement LookupRouter
This commit is contained in:
Tommi Reiman 2017-08-10 08:34:03 +03:00 committed by GitHub
commit 2b57426929
2 changed files with 30 additions and 4 deletions

View file

@ -69,10 +69,19 @@
(reduced (assoc m :route-params params))))
nil routes)))
(defrecord LookupRouter [routes]
Routing
(match-route [_ path]
(routes path)))
(defn router
([data]
(router data {}))
([data opts]
(->LinearRouter
(for [[p m] (resolve-routes data opts)]
[p m (regex/matcher p)]))))
(let [routes (resolve-routes data opts)]
(if (some regex/contains-wilds? (map first routes))
(->LinearRouter
(for [[p m] routes]
[p m (regex/matcher p)]))
(->LookupRouter
(into {} routes))))))

View file

@ -1,9 +1,26 @@
(ns reitit.core-test
(:require [clojure.test :refer [deftest testing is are]]
[reitit.core :as reitit]))
#?(:clj [reitit.core :as reitit]
:cljs [reitit.core :as reitit :refer [LinearRouter LookupRouter]]))
#?(:clj
(:import (reitit.core LinearRouter LookupRouter))))
(deftest reitit-test
(testing "linear router"
(let [router (reitit/router ["/api"
["/ipa"
["/:size"]]])]
(is (instance? LinearRouter router))
(is (map? (reitit/match-route router "/api/ipa/large")))))
(testing "lookup router"
(let [router (reitit/router ["/api"
["/ipa"
["/large"]]])]
(is (instance? LookupRouter router))
(is (map? (reitit/match-route router "/api/ipa/large")))))
(testing "bide sample"
(let [routes [["/auth/login" :auth/login]
["/auth/recovery/token/:token" :auth/recovery]