Skip to content

Instantly share code, notes, and snippets.

@renatoalencar
Last active June 7, 2020 02:37
Show Gist options
  • Save renatoalencar/3b6008e254d7b69c1745df0b68931e30 to your computer and use it in GitHub Desktop.
Save renatoalencar/3b6008e254d7b69c1745df0b68931e30 to your computer and use it in GitHub Desktop.
;;
;; Associa um valor `value` a um chave `key` no
;; primeiro argumento da funcao `f`.
;;
;; Espera-se que `f` seja um handler que possa
;; ser usado com o Ring.
;;
(defn wrap-assoc [f key value]
(fn [request] (f (assoc request key value))))
(defrecord App [database handler]
component/Lifecycle
(start [component]
(let [database (-> component :database :database)]
(assoc component :handler
(wrap-assoc handler :database database)))))
(defn new-app [handler]
(component/using
(map->App {:handler handler})
[:database]))
(defn list-users-handler [request]
{:status 200
:body (clojure.string/join "\n"
(-> request
:database ;; Aqui nós acessamos a chave `:database`
;; que foi associada pelo componente `App`.
(mc/find-maps :users)))})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment