Skip to content

Instantly share code, notes, and snippets.

Created March 31, 2014 03:38
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 anonymous/9884811 to your computer and use it in GitHub Desktop.
Save anonymous/9884811 to your computer and use it in GitHub Desktop.
(ns liberator-service.routes.home
(:require [compojure.core :refer :all]
[liberator.core :refer [defresource resource]]
[cheshire.core :refer [generate-string]]
[noir.io :as io]
[clojure.java.io :refer [file]]))
(defresource home
:available-media-types ["text/html"]
:exists?
(fn [context]
[(io/get-resource "/home.html")
{::file (file (str (io/resource-path) "/home.html"))}])
:handle-ok
(fn [{{{resource :resource} :route-params} :request}]
(clojure.java.io/input-stream (io/get-resource "/home.html")))
:last-modified
(fn [{{{resource :resource} :route-params} :request}]
(.lastModified (file (str (io/resource-path) "/home.html")))))
(def users (atom ["foo" "bar"]))
(defresource get-users
:allowed-methods [:get]
:handle-ok (fn [_] (generate-string @users))
:available-media-types ["application/json"])
(defresource add-user
:allowed-methods [:post]
:malformed? (fn [context]
(let [params (get-in context [:request :form-params])]
(empty? (get params "user"))))
:handle-malformed "user name cannot be empty!"
:post!
(fn [context]
(let [params (get-in context [:request :form-params])]
(swap! users conj (get params "user"))))
:handle-created (fn [_] (generate-string @users))
:available-media-types ["application/json"])
(defroutes home-routes
(ANY "/" request home)
(ANY "/add-user" request add-user)
(ANY "/users" request get-users))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment