From b4855699b528116fab8c96e4a908c6adbbe2f257 Mon Sep 17 00:00:00 2001 From: Tommi Reiman Date: Sun, 3 Sep 2017 14:55:58 +0300 Subject: [PATCH] use fn? instead of fspec with router options fspec fails for some reason. related? http://github.com/walmartlabs/lacinia/pull/112 --- src/reitit/core.cljc | 4 ++-- src/reitit/spec.cljc | 41 ++++++++++++++++----------------- test/cljc/reitit/spec_test.cljc | 39 ++++++++++++++++++------------- 3 files changed, 45 insertions(+), 39 deletions(-) diff --git a/src/reitit/core.cljc b/src/reitit/core.cljc index cdc3e85b..bd1aa9da 100644 --- a/src/reitit/core.cljc +++ b/src/reitit/core.cljc @@ -30,7 +30,7 @@ (expand [_ _])) (defn walk [data {:keys [path meta routes expand] - :or {path "", meta [], routes [], expand expand} + :or {meta [], routes [], expand expand} :as opts}] (letfn [(walk-many [p m r] @@ -245,7 +245,7 @@ | key | description | | -------------|-------------| - | `:path` | Base-path for routes (default `\"\"`) + | `:path` | Base-path for routes | `:routes` | Initial resolved routes (default `[]`) | `:meta` | Initial route meta (default `{}`) | `:expand` | Function of `arg opts => meta` to expand route arg to route meta-data (default `reitit.core/expand`) diff --git a/src/reitit/spec.cljc b/src/reitit/spec.cljc index 5673ecb5..72bdf06d 100644 --- a/src/reitit/spec.cljc +++ b/src/reitit/spec.cljc @@ -38,42 +38,41 @@ (s/def ::router reitit/router?) -(s/def :reitit.router/path (s/or :empty #{""} :path ::path)) +(s/def :reitit.router/path ::path) (s/def :reitit.router/routes ::routes) (s/def :reitit.router/meta ::meta) -(s/def :reitit.router/expand - (s/fspec :args (s/cat :arg ::arg, :opts ::opts) - :ret ::route)) +(s/def :reitit.router/expand fn? + #_(s/fspec :args (s/cat :arg ::arg, :opts ::opts) + :ret ::route)) -(s/def :reitit.router/coerce - (s/fspec :args (s/cat :route (s/spec ::route), :opts ::opts) - :ret ::route)) +(s/def :reitit.router/coerce fn? + #_(s/fspec :args (s/cat :route (s/spec ::route), :opts ::opts) + :ret ::route)) -(s/def :reitit.router/compile - (s/fspec :args (s/cat :route (s/spec ::route), :opts ::opts) - :ret ::result)) +(s/def :reitit.router/compile fn? + #_(s/fspec :args (s/cat :route (s/spec ::route), :opts ::opts) + :ret ::result)) -(s/def :reitit.router/conflicts - (s/fspec :args (s/cat :conflicts (s/map-of ::route (s/coll-of ::route :into #{}))))) +(s/def :reitit.router/conflicts fn? + #_(s/fspec :args (s/cat :conflicts (s/map-of ::route (s/coll-of ::route :into #{}))))) -(s/def :reitit.router/router - (s/fspec :args (s/cat :routes ::routes, :opts ::opts) - :ret ::router)) +(s/def :reitit.router/router fn? + #_(s/fspec :args (s/cat :routes ::routes, :opts ::opts) + :ret ::router)) -;; TODO: fspecs fail.. (s/def ::opts (s/nilable (s/keys :opt-un [:reitit.router/path :reitit.router/routes :reitit.router/meta - #_:reitit.router/expand - #_:reitit.router/coerce - #_:reitit.router/compile - #_:reitit.router/conflicts - #_:reitit.router/router]))) + :reitit.router/expand + :reitit.router/coerce + :reitit.router/compile + :reitit.router/conflicts + :reitit.router/router]))) (s/fdef reitit/router :args (s/or :1arity (s/cat :data (s/spec ::raw-routes)) diff --git a/test/cljc/reitit/spec_test.cljc b/test/cljc/reitit/spec_test.cljc index 2221a966..cb3f18a6 100644 --- a/test/cljc/reitit/spec_test.cljc +++ b/test/cljc/reitit/spec_test.cljc @@ -46,22 +46,29 @@ (testing "options" - (are [opts] - (is (= true (reitit/router? (reitit/router ["/api"] opts)))) + (are [opts] + (is (= true (reitit/router? (reitit/router ["/api"] opts)))) - {:path "/"} + {:path "/"} + {:meta {}} + {:expand (fn [_ _] {})} + {:coerce (fn [route _] route)} + {:compile (fn [_ _])} + {:conflicts (fn [_])} + {:router reitit/linear-router}) - {:meta {}} + (are [opts] + (is (thrown-with-msg? + ExceptionInfo + #"Call to #'reitit.core/router did not conform to spec" + (reitit/router + ["/api"] opts))) - #_{:coerce (fn [_ _] ["/"])} - ) - - - (are [opts] - (is (thrown-with-msg? - ExceptionInfo - #"Call to #'reitit.core/router did not conform to spec" - (reitit/router - ["/api"] opts))) - - {:meta 1})))) + {:path ""} + {:path nil} + {:meta nil} + {:expand nil} + {:coerce nil} + {:compile nil} + {:conflicts nil} + {:router nil}))))