Skip to content

Instantly share code, notes, and snippets.

@rickmode
Created November 4, 2010 21:35
Show Gist options
  • Save rickmode/663239 to your computer and use it in GitHub Desktop.
Save rickmode/663239 to your computer and use it in GitHub Desktop.
Request demo
(ns demo.core
(:use [ring.adapter.jetty :only (run-jetty)]
[ring.middleware.session :only (wrap-session)]
[ring.middleware.flash :only (wrap-flash)]
[ring.middleware.stacktrace :only (wrap-stacktrace)]
[hiccup.core :only (html)]
[hiccup.form-helpers :only (form-to label text-field submit-button)]
[hiccup.page-helpers :only (xhtml unordered-list)]
[compojure.core :only (defroutes GET POST)]
[compojure.route :only (not-found)]
[ring.util.response :only (redirect)]))
(defn layout
[{flash :flash} title & body]
(xhtml {:lang "en"}
[:head [:title title]]
[:body
[:h1 title]
(when flash
(html [:h2 "Flash!"]
[:p flash]))
body]))
(defn index [{{count :count :as session} :session params :params :as request}]
(layout request
"Demo"
(when count
(html [:h2 "Count!"]
[:p "The count is now " count]))
[:h2 "A form"]
(let [num (params "num")]
(form-to [:post]
(when-let [msg (get (::error request) "num")]
[:p "Error: " msg])
(label "num" "Number: ")
(text-field "num" num)
(submit-button "Add")))))
(defn add [{{count :count :as session} :session {num "num"} :params :as request}]
(try
(let [n (Integer/parseInt num)]
(-> (redirect "/")
(assoc :session (assoc session :count (if count (+ count n) n)))
(assoc :flash (str "Added " num " to " (if count count "nothing")))))
(catch NumberFormatException e
(index (assoc request ::error {"num" "Please enter a number"})))))
(defroutes main-routes
(GET "/" request (index request))
(POST "/" request (add request))
not-found)
(def app
(-> #'main-routes
(wrap-flash)
(wrap-session)
(wrap-stacktrace)))
(defn boot []
(run-jetty #'app {:join? false :port 8080}))
(defproject one-up "0.1.0-SNAPSHOT"
:description "Request Demo"
:dependencies [[org.clojure/clojure "1.2.0"]
[org.clojure/clojure-contrib "1.2.0"]
[ring/ring-core "0.3.3"]
[ring/ring-jetty-adapter "0.3.3"]
[compojure "0.5.2"]
[hiccup "0.3.0"]]
:dev-dependencies [[ring/ring-devel "0.3.3"]
[swank-clojure "1.2.1"]])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment