Skip to content

Instantly share code, notes, and snippets.

@zehnpaard
Created October 28, 2016 06:07
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 zehnpaard/3b65eb23fa6229f1f60c0e51c22b7d3f to your computer and use it in GitHub Desktop.
Save zehnpaard/3b65eb23fa6229f1f60c0e51c22b7d3f to your computer and use it in GitHub Desktop.
Simple Ring Demo with Separate Modules and GET/POST forms
(ns simple-modular-ring.core
(require
[ring.adapter.jetty :refer [run-jetty]]
[simple-modular-ring.handler :as h]
[simple-modular-ring.middleware :as m]
))
(def app
(-> h/post-form
m/logger
m/req-res-displayer
m/wrap-params))
(defonce server
(run-jetty #'app {:port 8080 :join? false}))
(ns simple-modular-ring.handler
(require
[ring.util.response :as res]
))
(defn plain-text [req]
(-> (res/response "Hello Goodbye")
(res/content-type "text/plain")))
(defn html [req]
(-> (res/response
"<div>
<h1>Hello World!</h1>
<p>Some random bit of text</p>
</div>")
(res/content-type "text/html")))
(defn not-found [req]
(-> (res/not-found "<b>Not found!</b>")
(res/content-type "text/html")))
(defn redirect [req]
(res/redirect "http://www.google.com"))
(defn get-form [req]
(-> (res/response
"<div>
<h1>Hello GET Form!</h1>
<form method=\"get\" action=\"form-submit\">
<input type=\"text\" name=\"name\" />
<input type=\"submit\" value\"submit\" />
</form>
</div>")
(res/content-type "text/html")))
(defn post-form [req]
(-> (res/response
"<div>
<h1>Hello POST Form!</h1>
<form method=\"post\" action=\"form-submit\">
<input type=\"text\" name=\"name\" />
<input type=\"submit\" value\"submit\" />
</form>
</div>")
(res/content-type "text/html")))
(ns simple-modular-ring.middleware
(require
[ring.middleware.params :as mparams]
))
(defonce log-atom (atom []))
(defn logger [handler]
(fn [req]
(let [res (handler req)]
(swap! log-atom #(conj % {:request req :response res}))
res)))
(defn req-res-displayer [handler]
(fn [req]
(let [res (handler req)]
(println "\nRequest:")
(clojure.pprint/pprint req)
(println "\nResponse:")
(clojure.pprint/pprint res)
res)))
(def wrap-params
mparams/wrap-params)
(defproject simple-modular-ring "0.1.0-SNAPSHOT"
:dependencies [[org.clojure/clojure "1.8.0"]
[ring "1.5.0"]])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment