Skip to content

Instantly share code, notes, and snippets.

@mpgarate
Created April 1, 2019 23:07
Show Gist options
  • Save mpgarate/cfcb661cc0a70fc25a418b33e5e5d412 to your computer and use it in GitHub Desktop.
Save mpgarate/cfcb661cc0a70fc25a418b33e5e5d412 to your computer and use it in GitHub Desktop.
diff --git a/merlin/src/main/scala/com/etsy/merlin/Engine.scala b/merlin/src/main/scala/com/etsy/merlin/Engine.scala
index 39a1361..b72cf92 100644
--- a/merlin/src/main/scala/com/etsy/merlin/Engine.scala
+++ b/merlin/src/main/scala/com/etsy/merlin/Engine.scala
@@ -4,7 +4,7 @@ import java.net.URL
import java.util.zip.GZIPOutputStream
import java.io.ByteArrayOutputStream
-import scalaj.http.{Http,HttpRequest}
+import scalaj.http.{Http,HttpRequest,HttpResponse}
import scalaz._
import Scalaz._
@@ -23,7 +23,7 @@ trait Engine[M[_]] {
}
}
-class SimpleHttpEngine[E](servers: List[Host], headers: List[(String,String)] = List(), recover: Throwable => E, gzip: Boolean=false) extends Engine[({type λ[α] = E \/ α})#λ] {
+class SimpleHttpEngine[E](servers: List[Host], headers: List[(String,String)] = List(), recover: Throwable => E, gzip: Boolean=false, throwOnHttpError: Boolean = false) extends Engine[({type λ[α] = E \/ α})#λ] {
import Utils._
val allHeaders = headers ++ (if(gzip) {
@@ -60,8 +60,15 @@ class SimpleHttpEngine[E](servers: List[Host], headers: List[(String,String)] =
(new URL(new URL(randomServer), route)).toString
}
+ def handleRequest(request: HttpRequest): HttpResponse[String] = {
+ throwOnHttpError match {
+ case true => request.asString.throwError
+ case _ => request.asString
+ }
+ }
+
def execute(request: HttpRequest): E \/ String = for {
- resp <- request.asString !! recover
+ resp <- handleRequest(request) !! recover
} yield resp.body
def post(route: String, json: String): E \/ String = execute(buildPost(getPath(route), json))
@@ -69,7 +76,7 @@ class SimpleHttpEngine[E](servers: List[Host], headers: List[(String,String)] =
def get(route: String, params: Map[String,String]=Map()): E \/ String = execute(buildGet(getPath(route), params))
}
-case class JsonHttpEngine[E](servers: List[Host], f: Throwable => E, gzip: Boolean = false) extends SimpleHttpEngine[E](servers, List("Content-Type" -> "application/json"), f, gzip)
+case class JsonHttpEngine[E](servers: List[Host], f: Throwable => E, gzip: Boolean = false, throwOnHttpError: Boolean = false) extends SimpleHttpEngine[E](servers, List("Content-Type" -> "application/json"), f, gzip, throwOnHttpError)
-case class HttpEngine(servers: List[Host], headers: List[(String,String)] = List(), gzip: Boolean = false) extends SimpleHttpEngine[String](servers, headers, { case s => s"Unable to call server $s.getMessage" }, gzip)
+case class HttpEngine(servers: List[Host], headers: List[(String,String)] = List(), gzip: Boolean = false, throwOnHttpError: Boolean = false) extends SimpleHttpEngine[String](servers, headers, { case s => s"Unable to call server ${s.getMessage}" }, gzip, throwOnHttpError)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment