Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Jul 24th, 2012  |  syntax: None  |  size: 1.72 KB  |  hits: 9  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. class Respond extends Service[Request, Response] with Logger {
  2.   def apply(request: Request) = {
  3.     try {
  4.       request.method -> Path(request.path) match {
  5.         case GET -> Root / "todos" => Future.value {
  6.           val data = Todos.allAsJson
  7.           debug("data: %s" format data)
  8.           Responses.json(data, acceptsGzip(request))
  9.         }
  10.         case GET -> Root / "todos" / id => Future.value {
  11.           val todo = Todos get id
  12.           val data = todo.toJson
  13.           debug("data: %s" format data)
  14.           Responses.json(data, acceptsGzip(request))
  15.         }
  16.         case POST -> Root / "todos" => Future.value {
  17.           val content = request.contentString
  18.           val todo    = Todos.fromJson(content, create = true)
  19.           val data    = todo.toJson
  20.           Responses.json(data, acceptsGzip(request))
  21.         }
  22.         case PUT -> Root / "todos" / id => Future.value {
  23.           val content = request.contentString
  24.           val todo    = Todos.fromJson(content, update = true)
  25.           val data    = todo.toJson
  26.           debug("data: %s" format data)
  27.           Responses.json(data, acceptsGzip(request))
  28.         }
  29.         case DELETE -> Root / "todos" / id => Future.value {
  30.           Todos remove id
  31.           debug("data: %s" format id)
  32.           Response()
  33.         }
  34.         case _ =>
  35.           Future value Response(Http11, NotFound)
  36.       }
  37.     } catch {
  38.       case e: NoSuchElement => Future value Response(Http11, NotFound)
  39.       case e: Exception => Future.value {
  40.         val message = Option(e.getMessage) getOrElse "Something went wrong."
  41.         error("\nMessage: %s\nStack trace:\n%s"
  42.           .format(message, e.getStackTraceString))
  43.         Responses.error(message, acceptsGzip(request))
  44.       }
  45.     }
  46.   }
  47. }