diff options
author | Li Haoyi <haoyi.sg@gmail.com> | 2018-07-25 17:02:16 +0800 |
---|---|---|
committer | Li Haoyi <haoyi.sg@gmail.com> | 2018-07-25 17:10:40 +0800 |
commit | bafd0bb41ee9728ec908b730ebe4f9d69178fd4a (patch) | |
tree | 479dfa8fc342aea3a40811686669b996b6948c8d | |
parent | 8a7a665f3d6cd386e57a55dcb003d25b76b14138 (diff) | |
download | cask-bafd0bb41ee9728ec908b730ebe4f9d69178fd4a.tar.gz cask-bafd0bb41ee9728ec908b730ebe4f9d69178fd4a.tar.bz2 cask-bafd0bb41ee9728ec908b730ebe4f9d69178fd4a.zip |
Enforce `com.lihaoyi:acyclic` on the Cask codebase
-rw-r--r-- | build.sc | 4 | ||||
-rw-r--r-- | cask/src/cask/endpoints/Endpoint.scala | 18 | ||||
-rw-r--r-- | cask/src/cask/endpoints/FormEndpoint.scala | 6 | ||||
-rw-r--r-- | cask/src/cask/endpoints/JsonEndpoint.scala | 2 | ||||
-rw-r--r-- | cask/src/cask/endpoints/ParamReader.scala | 8 | ||||
-rw-r--r-- | cask/src/cask/endpoints/StaticEndpoints.scala | 2 | ||||
-rw-r--r-- | cask/src/cask/endpoints/WebEndpoints.scala | 2 | ||||
-rw-r--r-- | cask/src/cask/main/Main.scala | 3 | ||||
-rw-r--r-- | cask/src/cask/main/Routes.scala | 17 | ||||
-rw-r--r-- | cask/test/src/test/cask/Cookies.scala | 2 | ||||
-rw-r--r-- | cask/test/src/test/cask/MultipartFileUploads.scala (renamed from cask/test/src/test/cask/FileUploads.scala) | 2 |
11 files changed, 31 insertions, 35 deletions
@@ -8,6 +8,10 @@ object cask extends ScalaModule{ ivy"com.github.scopt::scopt:3.5.0", ivy"com.lihaoyi::upickle:0.6.6" ) + def compileIvyDeps = Agg(ivy"com.lihaoyi::acyclic:0.1.7") + def scalacOptions = Seq("-P:acyclic:force") + def scalacPluginIvyDeps = Agg(ivy"com.lihaoyi::acyclic:0.1.7") + object test extends Tests{ def forkArgs = Seq("--illegal-access=deny") def ivyDeps = Agg(ivy"com.lihaoyi::utest::0.6.3") diff --git a/cask/src/cask/endpoints/Endpoint.scala b/cask/src/cask/endpoints/Endpoint.scala deleted file mode 100644 index d30f537..0000000 --- a/cask/src/cask/endpoints/Endpoint.scala +++ /dev/null @@ -1,18 +0,0 @@ -package cask.endpoints - -import cask.internal.Router -import cask.internal.Router.EntryPoint -import cask.main.Routes -import cask.model.{BaseResponse, ParamContext} -import io.undertow.server.HttpServerExchange - -trait Endpoint[R]{ - type InputType - val path: String - def subpath: Boolean = false - def wrapMethodOutput(t: R): Any - def handle(ctx: ParamContext, - bindings: Map[String, String], - routes: Routes, - entryPoint: EntryPoint[InputType, Routes, cask.model.ParamContext]): Router.Result[BaseResponse] -}
\ No newline at end of file diff --git a/cask/src/cask/endpoints/FormEndpoint.scala b/cask/src/cask/endpoints/FormEndpoint.scala index e4b28f4..55614b2 100644 --- a/cask/src/cask/endpoints/FormEndpoint.scala +++ b/cask/src/cask/endpoints/FormEndpoint.scala @@ -1,11 +1,12 @@ 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.FormParserFactory +import io.undertow.server.handlers.form.{FormData, FormParserFactory} import collection.JavaConverters._ @@ -18,6 +19,7 @@ object FormReader{ implicitly[QueryParamReader[T]].read(ctx, label, input.map(_.value)) } } + implicit def formValueReader = new FormReader[FormValue]{ def arity = 1 def read(ctx: ParamContext, label: String, input: Seq[FormValue]) = input.head @@ -35,7 +37,7 @@ object FormReader{ def read(ctx: ParamContext, label: String, input: Seq[FormValue]) = input.map(_.asFile.get) } } -class postForm(val path: String, override val subpath: Boolean = false) extends Endpoint[Response]{ +class postForm(val path: String, override val subpath: Boolean = false) extends Routes.Endpoint[Response]{ type InputType = Seq[FormValue] def wrapMethodOutput(t: Response) = t def parseMethodInput[T](implicit p: FormReader[T]) = p diff --git a/cask/src/cask/endpoints/JsonEndpoint.scala b/cask/src/cask/endpoints/JsonEndpoint.scala index 9ab2f90..68a66e6 100644 --- a/cask/src/cask/endpoints/JsonEndpoint.scala +++ b/cask/src/cask/endpoints/JsonEndpoint.scala @@ -25,7 +25,7 @@ object JsReader{ } } } -class postJson(val path: String, override val subpath: Boolean = false) extends Endpoint[Response]{ +class postJson(val path: String, override val subpath: Boolean = false) extends Routes.Endpoint[Response]{ type InputType = ujson.Js.Value def wrapMethodOutput(t: Response) = t def parseMethodInput[T](implicit p: JsReader[T]) = p diff --git a/cask/src/cask/endpoints/ParamReader.scala b/cask/src/cask/endpoints/ParamReader.scala index f623005..f1ec0bf 100644 --- a/cask/src/cask/endpoints/ParamReader.scala +++ b/cask/src/cask/endpoints/ParamReader.scala @@ -1,20 +1,18 @@ package cask.endpoints -import cask.Cookie import cask.internal.Router import cask.model.ParamContext import io.undertow.server.HttpServerExchange import io.undertow.server.handlers.form.{FormData, FormParserFactory} -abstract class ParamReader[T] - extends Router.ArgReader[Seq[String], T, cask.model.ParamContext]{ +abstract class ParamReader[T] extends Router.ArgReader[Unit, T, cask.model.ParamContext]{ def arity: Int - def read(ctx: cask.model.ParamContext, label: String, v: Seq[String]): T + def read(ctx: cask.model.ParamContext, label: String, v: Unit): T } object ParamReader{ class NilParam[T](f: (ParamContext, String) => T) extends ParamReader[T]{ def arity = 0 - def read(ctx: cask.model.ParamContext, label: String, v: Seq[String]): T = f(ctx, label) + def read(ctx: cask.model.ParamContext, label: String, v: Unit): T = f(ctx, label) } implicit object HttpExchangeParam extends NilParam[HttpServerExchange]((ctx, label) => ctx.exchange) diff --git a/cask/src/cask/endpoints/StaticEndpoints.scala b/cask/src/cask/endpoints/StaticEndpoints.scala index 7302bbe..32d499b 100644 --- a/cask/src/cask/endpoints/StaticEndpoints.scala +++ b/cask/src/cask/endpoints/StaticEndpoints.scala @@ -6,7 +6,7 @@ import cask.main.Routes import cask.model.{BaseResponse, ParamContext} import io.undertow.server.HttpServerExchange -class static(val path: String) extends Endpoint[String] { +class static(val path: String) extends Routes.Endpoint[String] { type InputType = Seq[String] override def subpath = true def wrapOutput(t: String) = t diff --git a/cask/src/cask/endpoints/WebEndpoints.scala b/cask/src/cask/endpoints/WebEndpoints.scala index e2f7b67..ed93c6c 100644 --- a/cask/src/cask/endpoints/WebEndpoints.scala +++ b/cask/src/cask/endpoints/WebEndpoints.scala @@ -8,7 +8,7 @@ import cask.model.{BaseResponse, ParamContext} import collection.JavaConverters._ -trait WebEndpoint extends Endpoint[BaseResponse]{ +trait WebEndpoint extends Routes.Endpoint[BaseResponse]{ type InputType = Seq[String] def wrapMethodOutput(t: BaseResponse) = t def parseMethodInput[T](implicit p: QueryParamReader[T]) = p diff --git a/cask/src/cask/main/Main.scala b/cask/src/cask/main/Main.scala index 28c7770..ac2d8dc 100644 --- a/cask/src/cask/main/Main.scala +++ b/cask/src/cask/main/Main.scala @@ -1,7 +1,6 @@ package cask.main import cask.model.{BaseResponse, ParamContext, Response, Status} -import cask.Cookie import cask.internal.Router.EntryPoint import cask.internal.{DispatchTrie, Router, Util} import io.undertow.Undertow @@ -42,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(Cookie.toUndertow(c))) + response.cookies.foreach(c => exchange.setResponseCookie(cask.endpoints.Cookie.toUndertow(c))) exchange.setStatusCode(response.statusCode) response.data.write(exchange.getOutputStream) diff --git a/cask/src/cask/main/Routes.scala b/cask/src/cask/main/Routes.scala index d3c060b..33964fa 100644 --- a/cask/src/cask/main/Routes.scala +++ b/cask/src/cask/main/Routes.scala @@ -1,14 +1,25 @@ package cask.main -import cask.endpoints.Endpoint +import cask.internal.Router import cask.internal.Router.EntryPoint -import cask.model.ParamContext -import io.undertow.server.HttpServerExchange +import cask.model.{BaseResponse, ParamContext} import scala.reflect.macros.blackbox.Context import language.experimental.macros object Routes{ + + trait Endpoint[R]{ + type InputType + val path: String + def subpath: Boolean = false + def wrapMethodOutput(t: R): Any + def handle(ctx: ParamContext, + bindings: Map[String, String], + routes: Routes, + entryPoint: EntryPoint[InputType, Routes, cask.model.ParamContext]): Router.Result[BaseResponse] + } + case class EndpointMetadata[T](metadata: Endpoint[_], entryPoint: EntryPoint[_, T, ParamContext]) case class RoutesEndpointsMetadata[T](value: EndpointMetadata[T]*) diff --git a/cask/test/src/test/cask/Cookies.scala b/cask/test/src/test/cask/Cookies.scala index cc64e5d..ba9edce 100644 --- a/cask/test/src/test/cask/Cookies.scala +++ b/cask/test/src/test/cask/Cookies.scala @@ -18,7 +18,7 @@ object Cookies extends cask.MainRoutes{ def deleteCookie() = { cask.Response( "Cookies Deleted!", - cookies = Seq(cask.Cookie("username", "the username", expires = java.time.Instant.EPOCH)) + cookies = Seq(cask.Cookie("username", "", expires = java.time.Instant.EPOCH)) ) } diff --git a/cask/test/src/test/cask/FileUploads.scala b/cask/test/src/test/cask/MultipartFileUploads.scala index e56be2d..f6e836e 100644 --- a/cask/test/src/test/cask/FileUploads.scala +++ b/cask/test/src/test/cask/MultipartFileUploads.scala @@ -3,7 +3,7 @@ package test.cask import io.undertow.server.HttpServerExchange import io.undertow.server.handlers.form.FormData -object FileUploads extends cask.MainRoutes{ +object MultipartFileUploads extends cask.MainRoutes{ // curl -F "image=@build.sc" localhost:8080/upload @cask.post("/upload") def uploadFile(exchange: HttpServerExchange, formData: FormData) = { |