Created
April 1, 2019 23:07
-
-
Save mpgarate/cfcb661cc0a70fc25a418b33e5e5d412 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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