summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cask/src/cask/internal/Util.scala15
-rw-r--r--cask/src/cask/model/Params.scala8
-rw-r--r--cask/src/cask/model/Response.scala4
-rw-r--r--docs/pages/1 - Cask: a Scala HTTP micro-framework .md12
-rw-r--r--example/minimalApplication/app/src/MinimalApplication.scala2
-rw-r--r--example/minimalApplication2/app/src/MinimalApplication2.scala2
-rw-r--r--example/todo/app/src/todo/TodoServer.scala2
-rw-r--r--example/todoApi/app/src/TodoMvcApi.scala2
-rw-r--r--example/todoDb/app/src/TodoMvcDb.scala2
-rw-r--r--readme.md2
10 files changed, 36 insertions, 15 deletions
diff --git a/cask/src/cask/internal/Util.scala b/cask/src/cask/internal/Util.scala
index 98c30c4..b4f33a8 100644
--- a/cask/src/cask/internal/Util.scala
+++ b/cask/src/cask/internal/Util.scala
@@ -1,11 +1,24 @@
package cask.internal
-import java.io.{PrintWriter, StringWriter}
+import java.io.{InputStream, PrintWriter, StringWriter}
import scala.collection.generic.CanBuildFrom
import scala.collection.mutable
+import java.io.OutputStream
object Util {
+ def transferTo(in: InputStream, out: OutputStream) = {
+ val buffer = new Array[Byte](8192)
+
+ while ({
+ in.read(buffer) match{
+ case -1 => false
+ case n =>
+ out.write(buffer, 0, n)
+ true
+ }
+ }) ()
+ }
def pluralize(s: String, n: Int) = {
if (n == 1) s else s + "s"
}
diff --git a/cask/src/cask/model/Params.scala b/cask/src/cask/model/Params.scala
index 901cca4..27c1a68 100644
--- a/cask/src/cask/model/Params.scala
+++ b/cask/src/cask/model/Params.scala
@@ -1,8 +1,9 @@
package cask.model
-import java.io.InputStream
+import java.io.{ByteArrayOutputStream, InputStream}
import cask.endpoints.ParamReader.NilParam
+import cask.internal.Util
import io.undertow.server.HttpServerExchange
import io.undertow.server.handlers.CookieImpl
@@ -17,6 +18,11 @@ case class Request(exchange: HttpServerExchange){
exchange.getRequestCookies.asScala.mapValues(Cookie.fromUndertow).toMap
}
lazy val data: InputStream = exchange.getInputStream
+ def readAllBytes() = {
+ val baos = new ByteArrayOutputStream()
+ Util.transferTo(data, baos)
+ baos.toByteArray
+ }
lazy val queryParams: Map[String, Seq[String]] = {
exchange.getQueryParameters.asScala.mapValues(_.asScala.toArray.toSeq).toMap
}
diff --git a/cask/src/cask/model/Response.scala b/cask/src/cask/model/Response.scala
index 15f46a7..979c442 100644
--- a/cask/src/cask/model/Response.scala
+++ b/cask/src/cask/model/Response.scala
@@ -2,6 +2,8 @@ package cask.model
import java.io.{InputStream, OutputStream, OutputStreamWriter}
+import cask.internal.Util
+
trait Response{
def data: Response.Data
@@ -31,7 +33,7 @@ object Response{
def write(out: OutputStream) = out.write(b)
}
implicit class StreamData(b: InputStream) extends Data{
- def write(out: OutputStream) = b.transferTo(out)
+ def write(out: OutputStream) = Util.transferTo(b, out)
}
implicit def JsonResponse[T: upickle.default.Writer](t: T) = new Data{
def write(out: OutputStream) = implicitly[upickle.default.Writer[T]].write(
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 22d879e..0b45154 100644
--- a/docs/pages/1 - Cask: a Scala HTTP micro-framework .md
+++ b/docs/pages/1 - Cask: a Scala HTTP micro-framework .md
@@ -7,7 +7,7 @@ object MinimalApplication extends cask.MainRoutes{
@cask.post("/do-thing")
def doThing(request: cask.Request) = {
- new String(request.data.readAllBytes()).reverse
+ new String(request.readAllBytes()).reverse
}
initialize()
@@ -92,7 +92,7 @@ object MinimalApplication extends cask.MainRoutes{
@cask.post("/do-thing")
def doThing(request: cask.Request) = {
- new String(request.data.readAllBytes()).reverse
+ new String(request.readAllBytes()).reverse
}
initialize()
@@ -136,7 +136,7 @@ object MinimalRoutes extends cask.Routes{
@cask.post("/do-thing")
def doThing(request: cask.Request) = {
- new String(request.data.readAllBytes()).reverse
+ new String(request.readAllBytes()).reverse
}
initialize()
@@ -543,7 +543,7 @@ object TodoMvcApi extends cask.MainRoutes{
@cask.post("/add")
def add(request: cask.Request) = {
- todos = Seq(Todo(false, new String(request.data.readAllBytes()))) ++ todos
+ todos = Seq(Todo(false, new String(request.readAllBytes()))) ++ todos
}
@cask.post("/toggle/:index")
@@ -637,7 +637,7 @@ object TodoMvcDb extends cask.MainRoutes{
@transactional
@cask.post("/add")
def add(request: cask.Request) = {
- val body = new String(request.data.readAllBytes())
+ val body = new String(request.readAllBytes())
run(query[Todo].insert(_.checked -> lift(false), _.text -> lift(body)).returning(_.id))
}
@@ -748,7 +748,7 @@ object Server extends cask.MainRoutes{
@transactional
@cask.post("/add/:state")
def add(state: String, request: cask.Request) = {
- val body = new String(request.data.readAllBytes())
+ val body = new String(request.readAllBytes())
run(query[Todo].insert(_.checked -> lift(false), _.text -> lift(body)).returning(_.id))
renderBody(state).render
}
diff --git a/example/minimalApplication/app/src/MinimalApplication.scala b/example/minimalApplication/app/src/MinimalApplication.scala
index 5357e64..e3b1eff 100644
--- a/example/minimalApplication/app/src/MinimalApplication.scala
+++ b/example/minimalApplication/app/src/MinimalApplication.scala
@@ -7,7 +7,7 @@ object MinimalApplication extends cask.MainRoutes{
@cask.post("/do-thing")
def doThing(request: cask.Request) = {
- new String(request.data.readAllBytes()).reverse
+ new String(request.readAllBytes()).reverse
}
initialize()
diff --git a/example/minimalApplication2/app/src/MinimalApplication2.scala b/example/minimalApplication2/app/src/MinimalApplication2.scala
index 01b4aa5..e537ea6 100644
--- a/example/minimalApplication2/app/src/MinimalApplication2.scala
+++ b/example/minimalApplication2/app/src/MinimalApplication2.scala
@@ -8,7 +8,7 @@ object MinimalRoutes extends cask.Routes{
@cask.post("/do-thing")
def doThing(request: cask.Request) = {
- new String(request.data.readAllBytes()).reverse
+ new String(request.readAllBytes()).reverse
}
initialize()
diff --git a/example/todo/app/src/todo/TodoServer.scala b/example/todo/app/src/todo/TodoServer.scala
index 0c66895..6ae7ee9 100644
--- a/example/todo/app/src/todo/TodoServer.scala
+++ b/example/todo/app/src/todo/TodoServer.scala
@@ -53,7 +53,7 @@ object TodoServer extends cask.MainRoutes{
@transactional
@cask.post("/add/:state")
def add(state: String, request: cask.Request) = {
- val body = new String(request.data.readAllBytes())
+ val body = new String(request.readAllBytes())
run(query[Todo].insert(_.checked -> lift(false), _.text -> lift(body)).returning(_.id))
renderBody(state).render
}
diff --git a/example/todoApi/app/src/TodoMvcApi.scala b/example/todoApi/app/src/TodoMvcApi.scala
index 3559f28..58df1d5 100644
--- a/example/todoApi/app/src/TodoMvcApi.scala
+++ b/example/todoApi/app/src/TodoMvcApi.scala
@@ -21,7 +21,7 @@ object TodoMvcApi extends cask.MainRoutes{
@cask.post("/add")
def add(request: cask.Request) = {
- todos = Seq(Todo(false, new String(request.data.readAllBytes()))) ++ todos
+ todos = Seq(Todo(false, new String(request.readAllBytes()))) ++ todos
}
@cask.post("/toggle/:index")
diff --git a/example/todoDb/app/src/TodoMvcDb.scala b/example/todoDb/app/src/TodoMvcDb.scala
index 72e20bd..c566b60 100644
--- a/example/todoDb/app/src/TodoMvcDb.scala
+++ b/example/todoDb/app/src/TodoMvcDb.scala
@@ -64,7 +64,7 @@ object TodoMvcDb extends cask.MainRoutes{
@transactional
@cask.post("/add")
def add(request: cask.Request) = {
- val body = new String(request.data.readAllBytes())
+ val body = new String(request.readAllBytes())
run(query[Todo].insert(_.checked -> lift(false), _.text -> lift(body)).returning(_.id))
}
diff --git a/readme.md b/readme.md
index a672287..1f6575b 100644
--- a/readme.md
+++ b/readme.md
@@ -10,7 +10,7 @@ object MinimalApplication extends cask.MainRoutes{
@cask.post("/do-thing")
def doThing(request: cask.Request) = {
- new String(request.data.readAllBytes()).reverse
+ new String(request.readAllBytes()).reverse
}
initialize()