Created
July 13, 2017 16:13
-
-
Save pjullah/f5850c1f591a6b762c89c9f99221978e to your computer and use it in GitHub Desktop.
Example of ring middleware
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(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