|
|
@ -6,7 +6,9 @@
|
|
6
|
6
|
(:use ring.util.response)
|
|
7
|
7
|
(:use ring.middleware.reload)
|
|
8
|
8
|
(:use ring.middleware.stacktrace)
|
|
9
|
|
(:use [ring.middleware.format-response :only [wrap-restful-response]]))
|
|
|
9
|
(:use [ring.middleware.format-response :only [wrap-restful-response]])
|
|
|
10
|
(:use [ring.middleware.format-params :only [wrap-restful-params]]))
|
|
|
11
|
|
|
10
|
12
|
|
|
11
|
13
|
; roadmap:
|
|
12
|
14
|
; 1. implement add-item, resurrect-item, close-item
|
|
|
@ -77,13 +79,43 @@
|
|
77
|
79
|
(dosync
|
|
78
|
80
|
(ref-set *shaming* (read-shame "self.todo.json")))
|
|
79
|
81
|
|
|
|
82
|
(defn take-n [start amount coll]
|
|
|
83
|
(take amount (drop start coll)))
|
|
|
84
|
|
|
|
85
|
(defn int-param [param & [default]]
|
|
|
86
|
"Parse an integer from a string, with an optional default value (which defaults to 0)."
|
|
|
87
|
(try (Integer/valueOf (or param default 0))
|
|
|
88
|
(catch NumberFormatException n (or default 0))))
|
|
|
89
|
|
|
|
90
|
(defn filter-keys [map keys]
|
|
|
91
|
(reduce-kv #(if (some (fn [k] (= k %2)) keys)
|
|
|
92
|
(assoc %1 %2 %3)
|
|
|
93
|
%1)
|
|
|
94
|
{} map))
|
|
|
95
|
|
|
80
|
96
|
(defroutes shame-routes
|
|
81
|
97
|
(GET "/" [] (response @*shaming*))
|
|
82
|
|
(GET "/current" [] (response (:current @*shaming*)))
|
|
|
98
|
(POST "/" [item] (dosync (ref-set *shaming*
|
|
|
99
|
(add-item item @*shaming*))))
|
|
|
100
|
(GET "/current" [start limit]
|
|
|
101
|
(response
|
|
|
102
|
(take-n (int-param start) (int-param limit 10) (:current @*shaming*))))
|
|
|
103
|
(GET "/past" [start limit]
|
|
|
104
|
(response
|
|
|
105
|
(take-n (int-param start) (int-param limit 10) (:past @*shaming*))))
|
|
|
106
|
(GET "/:item-name" [item-name] (response (get-by (:current @*shaming*)
|
|
|
107
|
:name item-name)))
|
|
|
108
|
(PUT "/:item-name" [item-name :as {params :params}] ; changes should be in the body?
|
|
|
109
|
(dosync (ref-set *shaming*
|
|
|
110
|
(change-item item-name (filter-keys params [:name]) @*shaming*))))
|
|
|
111
|
(DELETE "/:item-name" [item-name status]
|
|
|
112
|
(dosync (ref-set *shaming*
|
|
|
113
|
(close-item item-name (or status "failed") @*shaming*))))
|
|
83
|
114
|
(route/not-found "404 - Alternate Reality Monsters"))
|
|
84
|
115
|
|
|
85
|
116
|
(def serve
|
|
86
|
117
|
(-> (handler/site shame-routes)
|
|
87
|
118
|
(wrap-reload {:dirs ["."]})
|
|
88
|
119
|
(wrap-stacktrace)
|
|
|
120
|
(wrap-restful-params)
|
|
89
|
121
|
(wrap-restful-response)))
|