Browse Source

Compojure: Clamp query count between 1 and 500 to comply with test spec

Keith R. Gustafson 12 years ago
parent
commit
3267481cf2
1 changed files with 12 additions and 2 deletions
  1. 12 2
      compojure/hello/src/hello/handler.clj

+ 12 - 2
compojure/hello/src/hello/handler.clj

@@ -82,12 +82,22 @@
      queries ; Number of queries to run
      queries ; Number of queries to run
      (repeatedly get-world-raw)))))
      (repeatedly get-world-raw)))))
 
 
+(defn get-query-count [queries]
+  "Parse provided string value of query count, clamping values to between 1 and 500."
+  (let [q (try (Integer/parseInt queries)
+               (catch Exception e 1))] ; default to 1 on parse failure
+    (if (> q 500)
+      500 ; clamp to 500 max
+      (if (< q 1)
+        1 ; clamp to 1 min
+        q)))) ; otherwise use provided value
+
 ; Define route handlers
 ; Define route handlers
 (defroutes app-routes
 (defroutes app-routes
   (GET "/" [] "Hello, World!")
   (GET "/" [] "Hello, World!")
   (GET "/json" [] (response {:message "Hello, World!"}))
   (GET "/json" [] (response {:message "Hello, World!"}))
-  (GET "/db/:queries" [queries] (response (run-queries (Integer/parseInt queries))))
-  (GET "/dbraw/:queries" [queries] (response (run-queries-raw (Integer/parseInt queries))))
+  (GET "/db/:queries" [queries] (response (run-queries (get-query-count queries))))
+  (GET "/dbraw/:queries" [queries] (response (run-queries-raw (get-query-count queries))))
   (route/not-found "Not Found"))
   (route/not-found "Not Found"))
 
 
 ; Format responses as JSON
 ; Format responses as JSON