diff --git a/project.clj b/project.clj index 92dc5a1..f0639fe 100644 --- a/project.clj +++ b/project.clj @@ -16,7 +16,8 @@ [slugger "1.0.1"] [clj-time "0.6.0"] [org.clojure/math.numeric-tower "0.0.4"] - [clj-rss "0.1.3"]] + [clj-rss "0.1.3"] + [clj-metasearch "0.1.1"]] :repl-options {:init-ns blarg.repl} :plugins [[lein-ring "0.8.10"] [lein-environ "0.4.0"]] diff --git a/src/blarg/route_utils.clj b/src/blarg/route_utils.clj new file mode 100644 index 0000000..2e65cd5 --- /dev/null +++ b/src/blarg/route_utils.clj @@ -0,0 +1,37 @@ +(ns blarg.route-utils + (:require [clj-metasearch.core :refer [find-vars]] + [compojure.core :refer [defroutes]] + [noir.util.route :refer [def-restricted-routes]] + [taoensso.timbre :refer [log]] + [clojure.string :as string])) + +(defmacro register-routes [name & routes] + `(defroutes + ~(with-meta name {:compojure-routes? true}) + ~@routes)) + +(defmacro register-restricted-routes [name & routes] + `(def-restricted-routes + ~(with-meta name {:compojure-routes? true}) + ~@routes)) + +(defn find-routes [namespace-filter & more-routes] + (log :info "Discovering routes ...") + (let [routes (find-vars + :compojure-routes? + :require-all-namespaces? true + :namespace-pred (if (coll? namespace-filter) + (fn [namespace] + (some #(.startsWith (str namespace) %) namespace-filter)) + (fn [namespace] + (.startsWith (str namespace) namespace-filter)))) + names (->> routes + (map #(str (:var %))) + (string/join ", "))] + (log :info (str "Found " (count routes) " routes: " names)) + (as-> routes x + (map :var x) + (map var-get x) + (concat x more-routes) + (vec x)))) +