!htk move RequestBuilding trait from akka.http.testkit into akka.http.clien package, closes #15801

This commit is contained in:
Mathias 2014-09-17 16:49:34 +02:00
parent 47affda004
commit 27a7cb0664
3 changed files with 6 additions and 6 deletions

View file

@ -1,99 +0,0 @@
/*
* Copyright (C) 2009-2014 Typesafe Inc. <http://www.typesafe.com>
*/
package akka.http.testkit
import scala.collection.immutable
import scala.concurrent.{ Await, ExecutionContext }
import scala.concurrent.duration._
import scala.reflect.ClassTag
import akka.util.Timeout
import akka.event.{ Logging, LoggingAdapter }
import akka.http.model.parser.HeaderParser
import akka.http.marshalling._
import akka.http.model._
import headers.{ HttpCredentials, RawHeader }
import HttpMethods._
trait RequestBuilding extends TransformerPipelineSupport {
type RequestTransformer = HttpRequest HttpRequest
class RequestBuilder(val method: HttpMethod) {
def apply(): HttpRequest =
apply("/")
def apply(uri: String): HttpRequest =
apply(uri, HttpEntity.Empty)
def apply[T](uri: String, content: T)(implicit m: ToEntityMarshallers[T], ec: ExecutionContext): HttpRequest =
apply(uri, Some(content))
def apply[T](uri: String, content: Option[T])(implicit m: ToEntityMarshallers[T], ec: ExecutionContext): HttpRequest =
apply(Uri(uri), content)
def apply(uri: String, entity: HttpEntity.Regular): HttpRequest =
apply(Uri(uri), entity)
def apply(uri: Uri): HttpRequest =
apply(uri, HttpEntity.Empty)
def apply[T](uri: Uri, content: T)(implicit m: ToEntityMarshallers[T], ec: ExecutionContext): HttpRequest =
apply(uri, Some(content))
def apply[T](uri: Uri, content: Option[T])(implicit m: ToEntityMarshallers[T], timeout: Timeout = Timeout(1.second), ec: ExecutionContext): HttpRequest =
content match {
case None apply(uri, HttpEntity.Empty)
case Some(value)
val entity = Marshal(value).to[HttpEntity.Regular].await(timeout.duration)
apply(uri, entity)
}
def apply(uri: Uri, entity: HttpEntity.Regular): HttpRequest =
HttpRequest(method, uri, Nil, entity)
}
val Get = new RequestBuilder(GET)
val Post = new RequestBuilder(POST)
val Put = new RequestBuilder(PUT)
val Patch = new RequestBuilder(PATCH)
val Delete = new RequestBuilder(DELETE)
val Options = new RequestBuilder(OPTIONS)
val Head = new RequestBuilder(HEAD)
// TODO: reactivate after HTTP message encoding has been ported
//def encode(encoder: Encoder, flow: FlowMaterializer): RequestTransformer = encoder.encode(_, flow)
def addHeader(header: HttpHeader): RequestTransformer = _.mapHeaders(header +: _)
def addHeader(headerName: String, headerValue: String): RequestTransformer = {
val rawHeader = RawHeader(headerName, headerValue)
addHeader(HeaderParser.parseHeader(rawHeader).left.flatMap(_ Right(rawHeader)).right.get)
}
def addHeaders(first: HttpHeader, more: HttpHeader*): RequestTransformer = _.mapHeaders(_ ++ (first +: more))
def mapHeaders(f: immutable.Seq[HttpHeader] immutable.Seq[HttpHeader]): RequestTransformer = _.mapHeaders(f)
def removeHeader(headerName: String): RequestTransformer =
_ mapHeaders (_ filterNot (_.name equalsIgnoreCase headerName))
def removeHeader[T <: HttpHeader: ClassTag]: RequestTransformer =
removeHeader(implicitly[ClassTag[T]].runtimeClass)
def removeHeader(clazz: Class[_]): RequestTransformer =
_ mapHeaders (_ filterNot clazz.isInstance)
def removeHeaders(names: String*): RequestTransformer =
_ mapHeaders (_ filterNot (header names exists (_ equalsIgnoreCase header.name)))
def addCredentials(credentials: HttpCredentials) = addHeader(headers.Authorization(credentials))
def logRequest(log: LoggingAdapter, level: Logging.LogLevel = Logging.DebugLevel) = logValue[HttpRequest](log, level)
def logRequest(logFun: HttpRequest Unit) = logValue[HttpRequest](logFun)
implicit def header2AddHeader(header: HttpHeader): RequestTransformer = addHeader(header)
}
object RequestBuilding extends RequestBuilding

View file

@ -4,7 +4,6 @@
package akka.http.testkit
import akka.http.util.Deferrable
import com.typesafe.config.{ ConfigFactory, Config }
import scala.collection.immutable
import scala.concurrent.duration._
@ -13,6 +12,8 @@ import scala.reflect.ClassTag
import org.scalatest.Suite
import akka.actor.ActorSystem
import akka.stream.FlowMaterializer
import akka.http.client.RequestBuilding
import akka.http.util.Deferrable
import akka.http.server._
import akka.http.unmarshalling._
import akka.http.model._

View file

@ -1,50 +0,0 @@
/*
* Copyright (C) 2009-2014 Typesafe Inc. <http://www.typesafe.com>
*/
package akka.http.testkit
import akka.event.{ Logging, LoggingAdapter }
import scala.concurrent.{ Future, ExecutionContext }
trait TransformerPipelineSupport {
def logValue[T](log: LoggingAdapter, level: Logging.LogLevel = Logging.DebugLevel): T T =
logValue { value log.log(level, value.toString) }
def logValue[T](logFun: T Unit): T T = { response
logFun(response)
response
}
implicit class WithTransformation[A](value: A) {
def ~>[B](f: A B): B = f(value)
}
implicit class WithTransformerConcatenation[A, B](f: A B) extends (A B) {
def apply(input: A) = f(input)
def ~>[AA, BB, R](g: AA BB)(implicit aux: TransformerAux[A, B, AA, BB, R]) =
new WithTransformerConcatenation[A, R](aux(f, g))
}
}
object TransformerPipelineSupport extends TransformerPipelineSupport
trait TransformerAux[A, B, AA, BB, R] {
def apply(f: A B, g: AA BB): A R
}
object TransformerAux {
implicit def aux1[A, B, C] = new TransformerAux[A, B, B, C, C] {
def apply(f: A B, g: B C): A C = f andThen g
}
implicit def aux2[A, B, C](implicit ec: ExecutionContext) =
new TransformerAux[A, Future[B], B, C, Future[C]] {
def apply(f: A Future[B], g: B C): A Future[C] = f(_).map(g)
}
implicit def aux3[A, B, C](implicit ec: ExecutionContext) =
new TransformerAux[A, Future[B], B, Future[C], Future[C]] {
def apply(f: A Future[B], g: B Future[C]): A Future[C] = f(_).flatMap(g)
}
}