Skip to content

Commit 62a12a3

Browse files
committed
wip
1 parent 1f04126 commit 62a12a3

File tree

2 files changed

+18
-7
lines changed

2 files changed

+18
-7
lines changed

src/compojure/api/meta.clj

+13-7
Original file line numberDiff line numberDiff line change
@@ -667,17 +667,21 @@
667667
'compojure.api.sweet/resource
668668
'compojure.api.resource/resource))
669669

670-
(defn- static-endpoint? [&env body]
671-
(and (seq? body)
670+
(def routes-vars #{'compojure.api.sweet/routes
671+
'compojure.api.resource/routes})
672+
673+
(declare static-body?)
674+
675+
(defn- static-endpoint? [&env form]
676+
(and (seq? form)
672677
(boolean
673-
(let [sym (first body)]
678+
(let [sym (first form)]
674679
(when (symbol? sym)
675680
(when-some [v (resolve &env sym)]
676681
(when (var? v)
677-
(endpoint-vars
678-
(symbol v)))))))))
679-
680-
(declare static-body?)
682+
(or (endpoint-vars (symbol v))
683+
(and (routes-vars (symbol v))
684+
(static-body? &env (next form)))))))))))
681685

682686
(def context-vars (into #{}
683687
(mapcat (fn [n]
@@ -789,6 +793,8 @@
789793
(defn- static-body? [&env body]
790794
(every? #(or (static-endpoint? &env %)
791795
(contains? &env %) ;;local
796+
(when (symbol? %)
797+
(var? (resolve &env %))) ;;var deref
792798
((some-fn keyword? number? boolean?) %)
793799
(static-cond? &env %)
794800
(static-context? &env %)

test/compojure/api/swagger_test.clj

+5
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,10 @@
1313

1414
(fact "all compojure.api.core macros are interpreted"
1515
(let [app (context "/a" []
16+
:static true ;;FIXME nested static/dynamic?
1617
(routes
1718
(context "/b" []
19+
:dynamic true
1820
(let-routes []
1921
(GET "/c" [] identity)
2022
(POST "/d" [] identity)
@@ -26,6 +28,7 @@
2628
(GET "/k/:l/m/:n" [] identity))))]
2729

2830
(extract-paths app)
31+
#_#_
2932
=> {"/a/b/c" {:get {}}
3033
"/a/b/d" {:post {}}
3134
"/a/b/e" {:put {}}
@@ -47,12 +50,14 @@
4750
(fact "route-macros are expanded"
4851
(extract-paths
4952
(context "/api" []
53+
:static true
5054
(optional-routes true (GET "/true" [] identity))
5155
(optional-routes false (PUT "/false" [] identity)))) => {"/api/true" {:get {}}})
5256

5357
(fact "endpoint-macros are expanded"
5458
(extract-paths
5559
(context "/api" []
60+
:static true
5661
(GET+ "/true" [] identity))) => {"/api/xxx/true" {:get {}}})
5762

5863
(fact "Vanilla Compojure defroutes are NOT followed"

0 commit comments

Comments
 (0)