diff options
author | Li Haoyi <haoyi.sg@gmail.com> | 2018-07-25 17:26:42 +0800 |
---|---|---|
committer | Li Haoyi <haoyi.sg@gmail.com> | 2018-07-25 17:26:42 +0800 |
commit | c4ccbb44d760aa3eb8a260aafa8ccf557ba06d3f (patch) | |
tree | ea68b76f80b2683543581398aad6dee5a0245cc0 | |
parent | bafd0bb41ee9728ec908b730ebe4f9d69178fd4a (diff) | |
download | cask-c4ccbb44d760aa3eb8a260aafa8ccf557ba06d3f.tar.gz cask-c4ccbb44d760aa3eb8a260aafa8ccf557ba06d3f.tar.bz2 cask-c4ccbb44d760aa3eb8a260aafa8ccf557ba06d3f.zip |
Create `requests: Requests` NilParam with convenience methods for common necessities
-rw-r--r-- | cask/src/cask/endpoints/FormEndpoint.scala | 7 | ||||
-rw-r--r-- | cask/src/cask/endpoints/JsonEndpoint.scala | 1 | ||||
-rw-r--r-- | cask/src/cask/endpoints/StaticEndpoints.scala | 1 | ||||
-rw-r--r-- | cask/src/cask/main/Main.scala | 4 | ||||
-rw-r--r-- | cask/src/cask/model/Params.scala (renamed from cask/src/cask/endpoints/Params.scala) | 24 | ||||
-rw-r--r-- | cask/src/cask/model/Response.scala | 7 | ||||
-rw-r--r-- | cask/src/cask/package.scala | 16 | ||||
-rw-r--r-- | cask/test/src/test/cask/MinimalApplication.scala | 7 |
8 files changed, 44 insertions, 23 deletions
diff --git a/cask/src/cask/endpoints/FormEndpoint.scala b/cask/src/cask/endpoints/FormEndpoint.scala index 55614b2..2c420e9 100644 --- a/cask/src/cask/endpoints/FormEndpoint.scala +++ b/cask/src/cask/endpoints/FormEndpoint.scala @@ -1,12 +1,10 @@ package cask.endpoints -import cask.endpoints.ParamReader.NilParam import cask.internal.Router.EntryPoint import cask.internal.Router import cask.main.Routes -import cask.model.{ParamContext, Response} -import io.undertow.server.HttpServerExchange -import io.undertow.server.handlers.form.{FormData, FormParserFactory} +import cask.model.{FormValue, ParamContext, Response} +import io.undertow.server.handlers.form.{FormParserFactory} import collection.JavaConverters._ @@ -61,3 +59,4 @@ class postForm(val path: String, override val subpath: Boolean = false) extends .asInstanceOf[Router.Result[Response]] } } + diff --git a/cask/src/cask/endpoints/JsonEndpoint.scala b/cask/src/cask/endpoints/JsonEndpoint.scala index 68a66e6..ffbe290 100644 --- a/cask/src/cask/endpoints/JsonEndpoint.scala +++ b/cask/src/cask/endpoints/JsonEndpoint.scala @@ -4,7 +4,6 @@ import cask.internal.Router import cask.internal.Router.EntryPoint import cask.main.Routes import cask.model.{ParamContext, Response} -import io.undertow.server.HttpServerExchange sealed trait JsReader[T] extends Router.ArgReader[ujson.Js.Value, T, cask.model.ParamContext] diff --git a/cask/src/cask/endpoints/StaticEndpoints.scala b/cask/src/cask/endpoints/StaticEndpoints.scala index 32d499b..89e4f4a 100644 --- a/cask/src/cask/endpoints/StaticEndpoints.scala +++ b/cask/src/cask/endpoints/StaticEndpoints.scala @@ -4,7 +4,6 @@ import cask.internal.Router import cask.internal.Router.EntryPoint import cask.main.Routes import cask.model.{BaseResponse, ParamContext} -import io.undertow.server.HttpServerExchange class static(val path: String) extends Routes.Endpoint[String] { type InputType = Seq[String] diff --git a/cask/src/cask/main/Main.scala b/cask/src/cask/main/Main.scala index ac2d8dc..045c2ed 100644 --- a/cask/src/cask/main/Main.scala +++ b/cask/src/cask/main/Main.scala @@ -1,6 +1,6 @@ package cask.main -import cask.model.{BaseResponse, ParamContext, Response, Status} +import cask.model._ import cask.internal.Router.EntryPoint import cask.internal.{DispatchTrie, Router, Util} import io.undertow.Undertow @@ -41,7 +41,7 @@ abstract class BaseMain{ response.headers.foreach{case (k, v) => exchange.getResponseHeaders.put(new HttpString(k), v) } - response.cookies.foreach(c => exchange.setResponseCookie(cask.endpoints.Cookie.toUndertow(c))) + response.cookies.foreach(c => exchange.setResponseCookie(Cookie.toUndertow(c))) exchange.setStatusCode(response.statusCode) response.data.write(exchange.getOutputStream) diff --git a/cask/src/cask/endpoints/Params.scala b/cask/src/cask/model/Params.scala index 7a56085..8f206c8 100644 --- a/cask/src/cask/endpoints/Params.scala +++ b/cask/src/cask/model/Params.scala @@ -1,6 +1,9 @@ -package cask.endpoints +package cask.model + +import java.io.InputStream import cask.endpoints.ParamReader.NilParam +import io.undertow.server.HttpServerExchange import io.undertow.server.handlers.CookieImpl class Subpath(val value: Seq[String]) @@ -8,7 +11,24 @@ object Subpath{ implicit object SubpathParam extends NilParam[Subpath]((ctx, label) => new Subpath(ctx.remaining)) } - +case class Request(exchange: HttpServerExchange){ + import collection.JavaConverters._ + lazy val cookies: Map[String, Cookie] = { + exchange.getRequestCookies.asScala.mapValues(Cookie.fromUndertow).toMap + } + lazy val data: InputStream = exchange.getInputStream + lazy val queryParams: Map[String, Seq[String]] = { + exchange.getQueryParameters.asScala.mapValues(_.asScala.toArray.toSeq).toMap + } + lazy val headers: Map[String, Seq[String]] = { + exchange.getRequestHeaders.asScala + .map{ header => header.getHeaderName.toString.toLowerCase -> header.asScala } + .toMap + } +} +object Request{ + implicit object RequestParam extends NilParam[Request]((ctx, label) => new Request(ctx.exchange)) +} object Cookie{ implicit object CookieParam extends NilParam[Cookie]((ctx, label) => Cookie.fromUndertow(ctx.exchange.getRequestCookies().get(label)) diff --git a/cask/src/cask/model/Response.scala b/cask/src/cask/model/Response.scala index 5443014..3166656 100644 --- a/cask/src/cask/model/Response.scala +++ b/cask/src/cask/model/Response.scala @@ -2,7 +2,7 @@ package cask.model import java.io.{InputStream, OutputStream, OutputStreamWriter} -import cask.endpoints.Cookie +import io.undertow.server.HttpServerExchange trait BaseResponse{ @@ -71,10 +71,7 @@ case class Static(path: String) extends BaseResponse { } -case class Request(cookies: Map[String, Cookie], - data: InputStream, - queryParams: Map[String, Seq[String]], - headers: Map[String, Seq[String]]) + case class Response(data: BaseResponse.Data, statusCode: Int = 200, diff --git a/cask/src/cask/package.scala b/cask/src/cask/package.scala index b715814..791bc51 100644 --- a/cask/src/cask/package.scala +++ b/cask/src/cask/package.scala @@ -6,6 +6,14 @@ package object cask { val Abort = model.Abort type Redirect = model.Redirect val Redirect = model.Redirect + type FormValue = model.FormValue + val FormValue = model.FormValue + type Cookie = model.Cookie + val Cookie = model.Cookie + type Subpath = model.Subpath + val Subpath = model.Subpath + type Request = model.Request + val Request = model.Request // endpoints type get = endpoints.get @@ -16,14 +24,6 @@ package object cask { type postJson = endpoints.postJson type postForm = endpoints.postForm - // endpoints misc - type FormValue = endpoints.FormValue - val FormValue = endpoints.FormValue - type Cookie = endpoints.Cookie - val Cookie = endpoints.Cookie - type Subpath = endpoints.Subpath - val Subpath = endpoints.Subpath - // main type MainRoutes = main.MainRoutes type Routes = main.Routes diff --git a/cask/test/src/test/cask/MinimalApplication.scala b/cask/test/src/test/cask/MinimalApplication.scala index caa6184..4bb1ca1 100644 --- a/cask/test/src/test/cask/MinimalApplication.scala +++ b/cask/test/src/test/cask/MinimalApplication.scala @@ -6,5 +6,12 @@ object MinimalApplication extends cask.MainRoutes{ "Hello World!" } + @cask.get("/request-info") + def hello(request: cask.Request) = { + request.queryParams.toString + "\n" + + request.headers.toString + "\n" + + request.cookies.toString + } + initialize() } |