Skip to content

Instantly share code, notes, and snippets.

@rickmode
Created November 4, 2010 21:45
Show Gist options
  • Save rickmode/663259 to your computer and use it in GitHub Desktop.
Save rickmode/663259 to your computer and use it in GitHub Desktop.
string resources
(defn res-string
"Returns a string resource by keyword."
[{res ::resources} k] (get res k))
(defn res-format
"Formats a keyed resource string using clojure.core/format.
Equivalent to (format (res-string k) ...)."
[request k & args]
(apply format (res-string request k) args))
(defn wrap-with-resources [handler & res-maps]
(let [combined (apply merge {} res-maps)]
(fn [request]
(handler (assoc request ::resources (merge (::resources request) combined))))))
;; ...
(defn sub-routes
"Define a set of sub-routes within a larger set.
The routes defined by compojure.core/route (and thus
compojure.core/defroutes) are wrapped by middleware.
Use of sub-routes avoids wrapping these intermediate
routes with that middleware multiple times.
Therefore this is meant to be used within a
compojure.core/routes or compojure.core/defroutes form."
[& handlers]
(fn [request] (some #(% request) handlers)))
(defmacro wrap-routes
"Wrap many routes with a single middleware
(as opposed to compojure.core/wrap! which wraps a single route with
one or more middlewares).
Note: this is meant to be used within compojure.core/routes or
compojure.core/defroutes."
[wrap-expr & routes]
`(-> (sub-routes ~@routes)
~wrap-expr))
;; ...
(defroutes main-routes
(GET "/" request (index request))
(wrap-routes (wrap-with-resources validation-resources model/model-resources register-resources)
(GET "/register" request (register request))
(POST "/register" request (do-register request)))
(GET ["/user/:id", :id #"[0-9]+"] {{id (name :id)} :params :as request} (user id request))
not-found)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment