Skip to content

Instantly share code, notes, and snippets.

@iperdomo
Last active December 31, 2015 17:19
Show Gist options
  • Select an option

  • Save iperdomo/8019012 to your computer and use it in GitHub Desktop.

Select an option

Save iperdomo/8019012 to your computer and use it in GitHub Desktop.
Use of malformed? and processable?
(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