Skip to content

Instantly share code, notes, and snippets.

@pjullah
Created July 13, 2017 16:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pjullah/f5850c1f591a6b762c89c9f99221978e to your computer and use it in GitHub Desktop.
Save pjullah/f5850c1f591a6b762c89c9f99221978e to your computer and use it in GitHub Desktop.
Example of ring middleware
(defn one
[handler]
(println "handler one")
(fn [request]
(println "request one")
(handler request)))
(defn two
[handler]
(println "handler two")
(fn [request]
(println "request two")
(handler request)))
(def app1 (one (two (fn [& args] args))))
(app1 {:test "test1"})
; let's break that out a little, and replace 'two' with an inline
; version of itself. We unfortunatly loose the println to let us know that
; handler two has been called...
(def app2
(one
(fn [request]
(println "request two")
((fn [& args] args) request))))
(app2 {:test "test2"})
; now let's replace 'one'
(def app3
(fn [outer-request] ; one
(println "request one")
((fn [inner-request] ; two
(println "request two")
((fn [& args] args)
inner-request))
outer-request)))
(app3 {:test "test3"})
; clear so far!? Probably not, but let's hope.
(def app4
(fn [outer-request] ; one
(println "request one - before: " outer-request)
(let [outer-request (assoc outer-request :outer "we added this in (outer)")]
(println "request one - after" outer-request)
((fn [inner-request] ; two
(println "request two - before: " inner-request)
(let [inner-request (assoc inner-request :inner "we added this (inner)")]
(println "request two - after" inner-request)
((fn [& args] args) inner-request)))
outer-request))))
(app4 {:test "test4"})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment