Advertisement
Guest User

Untitled

a guest
Dec 1st, 2015
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.29 KB | None | 0 0
  1. (ns myapp.component.handler
  2. (:require [com.stuartsierra.component :as component]
  3. [compojure.core :as compojure]
  4. [jdbc-ring-session.core :refer [jdbc-store]]))
  5.  
  6. (defn- find-routes [component]
  7. (keep :routes (vals component)))
  8.  
  9. (defn- middleware-fn [component middleware]
  10. (if (vector? middleware)
  11. (let [[f & keys] middleware
  12. arguments (map #(get component %) keys)]
  13. #(apply f % arguments))
  14. middleware))
  15.  
  16. (defn- compose-middleware [{:keys [middleware] :as component}]
  17. (->> (reverse middleware)
  18. (map #(middleware-fn component %))
  19. (apply comp identity)))
  20.  
  21. (defrecord Handler [defaults db middleware]
  22. component/Lifecycle
  23. (start [component]
  24. (let [component (-> component
  25. (assoc-in [:defaults
  26. :session
  27. :store]
  28. (jdbc-store (:spec db))))]
  29. (if-not (:handler component)
  30. (let [routes (find-routes component)
  31. wrap-mw (compose-middleware component)
  32. handler (wrap-mw (apply compojure/routes routes))]
  33. (assoc component :handler handler))
  34. component)))
  35. (stop [component]
  36. (dissoc component :handler)))
  37.  
  38. (defn handler-component [options]
  39. (map->Handler options))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement