summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--build.sc3
-rw-r--r--cask/src/cask/main/Routes.scala2
-rw-r--r--cask/src/cask/router/Decorators.scala1
-rw-r--r--cask/util/src/cask/util/BatchActor.scala2
-rw-r--r--docs/pages/1 - Cask: a Scala HTTP micro-framework.md4
-rw-r--r--example/compress2/app/src/Compress2.scala4
-rw-r--r--example/compress3/app/src/Compress3.scala4
-rw-r--r--example/minimalApplication2/app/src/MinimalApplication2.scala4
-rw-r--r--example/websockets3/app/src/Websockets3.scala21
-rw-r--r--example/websockets3/app/test/src/ExampleTests.scala75
-rw-r--r--example/websockets3/build.sc17
-rw-r--r--readme.md4
12 files changed, 126 insertions, 15 deletions
diff --git a/build.sc b/build.sc
index 7693099..155c070 100644
--- a/build.sc
+++ b/build.sc
@@ -22,6 +22,7 @@ import $file.example.twirl.build
import $file.example.variableRoutes.build
import $file.example.websockets.build
import $file.example.websockets2.build
+import $file.example.websockets3.build
trait CaskModule extends ScalaModule with PublishModule{
def scalaVersion = "2.13.0"
@@ -115,6 +116,7 @@ object example extends Module{
object variableRoutes extends $file.example.variableRoutes.build.AppModule with LocalModule
object websockets extends $file.example.websockets.build.AppModule with LocalModule
object websockets2 extends $file.example.websockets2.build.AppModule with LocalModule
+ object websockets3 extends $file.example.websockets2.build.AppModule with LocalModule
}
def publishVersion = T.input($file.ci.version.publishVersion)
@@ -158,6 +160,7 @@ def uploadToGithub(authKey: String) = T.command{
$file.example.variableRoutes.build.millSourcePath,
$file.example.websockets.build.millSourcePath,
$file.example.websockets2.build.millSourcePath,
+ $file.example.websockets3.build.millSourcePath,
)
for(example <- examples){
val f = T.ctx().dest
diff --git a/cask/src/cask/main/Routes.scala b/cask/src/cask/main/Routes.scala
index 98c5b78..f93e641 100644
--- a/cask/src/cask/main/Routes.scala
+++ b/cask/src/cask/main/Routes.scala
@@ -17,5 +17,5 @@ trait Routes{
metadata0 = routes
}
- def log: cask.util.Logger
+ implicit def log: cask.util.Logger
}
diff --git a/cask/src/cask/router/Decorators.scala b/cask/src/cask/router/Decorators.scala
index cd2c1a3..14b4ab4 100644
--- a/cask/src/cask/router/Decorators.scala
+++ b/cask/src/cask/router/Decorators.scala
@@ -2,7 +2,6 @@ package cask.router
import cask.internal.Conversion
import cask.model.{Request, Response}
-import cask.router.{ArgReader, EntryPoint, Result}
/**
* A [[Decorator]] allows you to annotate a function to wrap it, via
diff --git a/cask/util/src/cask/util/BatchActor.scala b/cask/util/src/cask/util/BatchActor.scala
index 137b852..bee4386 100644
--- a/cask/util/src/cask/util/BatchActor.scala
+++ b/cask/util/src/cask/util/BatchActor.scala
@@ -1,7 +1,5 @@
package cask.util
-import cask.util.Logger
-
import scala.collection.mutable
import scala.concurrent.ExecutionContext
diff --git a/docs/pages/1 - Cask: a Scala HTTP micro-framework.md b/docs/pages/1 - Cask: a Scala HTTP micro-framework.md
index 4a68c2a..3c0f4ef 100644
--- a/docs/pages/1 - Cask: a Scala HTTP micro-framework.md
+++ b/docs/pages/1 - Cask: a Scala HTTP micro-framework.md
@@ -81,10 +81,10 @@ via the following coordinates:
```scala
// Mill
-ivy"com.lihaoyi::cask:0.2.7"
+ivy"com.lihaoyi::cask:0.2.8"
// SBT
-"com.lihaoyi" %% "cask" % "0.2.7"
+"com.lihaoyi" %% "cask" % "0.2.8"
```
The `./mill` command is just a wrapper around the
diff --git a/example/compress2/app/src/Compress2.scala b/example/compress2/app/src/Compress2.scala
index b0deaa0..e6c4cc9 100644
--- a/example/compress2/app/src/Compress2.scala
+++ b/example/compress2/app/src/Compress2.scala
@@ -1,8 +1,6 @@
package app
-import cask.util.Logger
-
-case class Compress2()(implicit val log: Logger) extends cask.Routes{
+case class Compress2()(implicit val log: cask.Logger) extends cask.Routes{
override def decorators = Seq(new cask.decorators.compress())
@cask.get("/")
diff --git a/example/compress3/app/src/Compress3.scala b/example/compress3/app/src/Compress3.scala
index 95bd851..49062a9 100644
--- a/example/compress3/app/src/Compress3.scala
+++ b/example/compress3/app/src/Compress3.scala
@@ -1,8 +1,6 @@
package app
-import cask.util.Logger
-
-case class Compress3()(implicit val log: Logger) extends cask.Routes{
+case class Compress3()(implicit val log: cask.Logger) extends cask.Routes{
@cask.get("/")
def hello() = {
diff --git a/example/minimalApplication2/app/src/MinimalApplication2.scala b/example/minimalApplication2/app/src/MinimalApplication2.scala
index 41ca55f..efe9204 100644
--- a/example/minimalApplication2/app/src/MinimalApplication2.scala
+++ b/example/minimalApplication2/app/src/MinimalApplication2.scala
@@ -1,8 +1,6 @@
package app
-import cask.util.Logger
-
-case class MinimalRoutes()(implicit val log: Logger) extends cask.Routes{
+case class MinimalRoutes()(implicit val log: cask.Logger) extends cask.Routes{
@cask.get("/")
def hello() = {
"Hello World!"
diff --git a/example/websockets3/app/src/Websockets3.scala b/example/websockets3/app/src/Websockets3.scala
new file mode 100644
index 0000000..8368e0d
--- /dev/null
+++ b/example/websockets3/app/src/Websockets3.scala
@@ -0,0 +1,21 @@
+package app
+
+case class Websockets3()(implicit val log: cask.Logger) extends cask.Routes{
+ @cask.websocket("/connect/:userName")
+ def showUserProfile(userName: String): cask.WebsocketResult = {
+ if (userName != "haoyi") cask.Response("", statusCode = 403)
+ else cask.WsHandler { channel =>
+ cask.WsActor {
+ case cask.WsActor.Text("") => channel.send(cask.WsActor.Close())
+ case cask.WsActor.Text(data) =>
+ channel.send(cask.WsActor.Text(userName + " " + data))
+ }
+ }
+ }
+
+ initialize()
+}
+
+object Websockets3Main extends cask.Main{
+ val allRoutes = Seq(Websockets3())
+}
diff --git a/example/websockets3/app/test/src/ExampleTests.scala b/example/websockets3/app/test/src/ExampleTests.scala
new file mode 100644
index 0000000..a595c4c
--- /dev/null
+++ b/example/websockets3/app/test/src/ExampleTests.scala
@@ -0,0 +1,75 @@
+package app
+
+import java.util.concurrent.atomic.AtomicInteger
+
+import org.asynchttpclient.ws.{WebSocket, WebSocketListener, WebSocketUpgradeHandler}
+import utest._
+
+object ExampleTests extends TestSuite{
+
+
+ def withServer[T](example: cask.main.Main)(f: String => T): T = {
+ val server = io.undertow.Undertow.builder
+ .addHttpListener(8080, "localhost")
+ .setHandler(example.defaultHandler)
+ .build
+ server.start()
+ val res =
+ try f("http://localhost:8080")
+ finally server.stop()
+ res
+ }
+
+ val tests = Tests{
+ test("Websockets") - withServer(Websockets3Main){ host =>
+ @volatile var out = List.empty[String]
+ val client = org.asynchttpclient.Dsl.asyncHttpClient();
+ try{
+
+ // 4. open websocket
+ val ws: WebSocket = client.prepareGet("ws://localhost:8080/connect/haoyi")
+ .execute(new WebSocketUpgradeHandler.Builder().addWebSocketListener(
+ new WebSocketListener() {
+
+ override def onTextFrame(payload: String, finalFragment: Boolean, rsv: Int) {
+ out = payload :: out
+ }
+
+ def onOpen(websocket: WebSocket) = ()
+
+ def onClose(websocket: WebSocket, code: Int, reason: String) = ()
+
+ def onError(t: Throwable) = ()
+ }).build()
+ ).get()
+
+ // 5. send messages
+ ws.sendTextFrame("hello")
+ ws.sendTextFrame("world")
+ ws.sendTextFrame("")
+ Thread.sleep(100)
+ out ==> List("haoyi world", "haoyi hello")
+
+ var error: String = ""
+ val cli2 = client.prepareGet("ws://localhost:8080/connect/nobody")
+ .execute(new WebSocketUpgradeHandler.Builder().addWebSocketListener(
+ new WebSocketListener() {
+
+ def onOpen(websocket: WebSocket) = ()
+
+ def onClose(websocket: WebSocket, code: Int, reason: String) = ()
+
+ def onError(t: Throwable) = {
+ error = t.toString
+ }
+ }).build()
+ ).get()
+
+ assert(error.contains("403"))
+
+ } finally{
+ client.close()
+ }
+ }
+ }
+}
diff --git a/example/websockets3/build.sc b/example/websockets3/build.sc
new file mode 100644
index 0000000..197e285
--- /dev/null
+++ b/example/websockets3/build.sc
@@ -0,0 +1,17 @@
+import mill._, scalalib._
+
+
+trait AppModule extends ScalaModule{
+ def scalaVersion = "2.13.0"
+ def ivyDeps = Agg[Dep](
+ )
+ object test extends Tests{
+ def testFrameworks = Seq("utest.runner.Framework")
+
+ def ivyDeps = Agg(
+ ivy"com.lihaoyi::utest::0.7.1",
+ ivy"com.lihaoyi::requests::0.2.0",
+ ivy"org.asynchttpclient:async-http-client:2.5.2"
+ )
+ }
+} \ No newline at end of file
diff --git a/readme.md b/readme.md
index e1c6f50..9b40e29 100644
--- a/readme.md
+++ b/readme.md
@@ -38,6 +38,10 @@ courtesy of EJ Technologies
## Changelog
+### 0.2.8
+
+- Make `Routes#log` implicit
+
### 0.2.7
- Cross-publish `cask.util` for Scala.js