Last active
December 31, 2015 17:19
-
-
Save iperdomo/8019012 to your computer and use it in GitHub Desktop.
Use of malformed? and processable?
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| (ns akvo.flow-services.geo | |
| (:require [liberator.core :refer (defresource resource)] | |
| [liberator.dev :refer (wrap-trace)] ;; Just in dev mode | |
| [ring.middleware.params :refer (wrap-params)] | |
| [ring.adapter.jetty :refer (run-jetty)] | |
| [compojure.core :refer (defroutes GET)] | |
| [compojure.handler :refer (api)])) | |
| (defresource hello-world | |
| :available-media-types ["text/html"] | |
| :malformed? (fn [ctx] | |
| (let [{:keys [lat lon]} (get-in ctx [:request :params])] | |
| (try | |
| [false {:lat (Double/parseDouble lat) :lon (Double/parseDouble lon)}] ;; when false return a vector | |
| (catch Exception _ ;; catches possible NPE and NumberFormatException | |
| true)))) | |
| :processable? (fn [ctx] | |
| (boolean (and (<= -180.0 (:lat ctx) 180.0) | |
| (<= -90.0 (:lon ctx) 90.0 )))) | |
| :handle-ok (fn [ctx] | |
| (format "<html>Epoch time: %s and params: %s</html>" (System/currentTimeMillis) [(:lat ctx) (:lon ctx)])) ;; lat and lon available in context | |
| :handle-malformed "Lat and long are required parameters" | |
| :handle-unprocessable-entity "Lat needs to be between -180 and 180 and Lon needs to be between -90 and 90") | |
| (defroutes app | |
| (GET "/" [] hello-world)) | |
| (def handler | |
| (-> | |
| (api app) | |
| (wrap-trace :header :ui))) ;; Just in dev mode | |
| (def server (run-jetty #'handler {:port 3000 :join? false})) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment