Skip to content

Commit a0d5452

Browse files
Yuriy LazaryevYuriy Lazaryev
Yuriy Lazaryev
authored and
Yuriy Lazaryev
committed
#42 make dependency on spray.httpx optional; up scala version to 2.11.8; update spray-json to 1.3.2
1 parent c2fc912 commit a0d5452

File tree

10 files changed

+45
-50
lines changed

10 files changed

+45
-50
lines changed

build.sbt

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,23 +8,23 @@ organization := "org.zalando"
88

99
name := "scala-jsonapi"
1010

11-
scalaVersion := "2.11.7"
11+
scalaVersion := "2.11.8"
1212

1313
scalacOptions ++= Seq("-feature", "-unchecked", "-deprecation")
1414

15-
crossScalaVersions := Seq("2.11.7", "2.10.6")
15+
crossScalaVersions := Seq("2.11.8", "2.10.6")
1616

1717
resolvers ++= Seq(
1818
"spray" at "http://repo.spray.io/",
1919
"Typesafe Repo" at "http://repo.typesafe.com/typesafe/releases/"
2020
)
2121

2222
libraryDependencies ++= Seq(
23-
"io.spray" %% "spray-json" % "1.3.1" % "provided",
24-
"io.spray" %% "spray-httpx" % "1.3.2",
25-
"com.typesafe.akka" %% "akka-actor" % "2.3.6" % "provided",
26-
"com.typesafe.play" %% "play-json" % "2.3.8" % "provided",
27-
"org.scalatest" %% "scalatest" % "2.2.4" % "test"
23+
"io.spray" %% "spray-json" % "1.3.2" % "provided",
24+
"io.spray" %% "spray-httpx" % "1.3.3" % "provided",
25+
"com.typesafe.akka" %% "akka-actor" % "2.3.6" % "provided",
26+
"com.typesafe.play" %% "play-json" % "2.3.8" % "provided",
27+
"org.scalatest" %% "scalatest" % "2.2.4" % "test"
2828
)
2929

3030
scalariformSettings ++ Seq(
@@ -75,4 +75,4 @@ pomExtra := (
7575
<name>Boris Malensek</name>
7676
<url>https://github.com/zmeda</url>
7777
</developer>
78-
</developers>)
78+
</developers>)
Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,6 @@
11
package org.zalando.jsonapi
22

3-
import org.zalando.jsonapi.model.RootObject
4-
import spray.http.{ MediaType, MediaTypes }
5-
import spray.httpx.marshalling.Marshaller
6-
import spray.httpx.unmarshalling.Unmarshaller
7-
83
package object json {
94
private[json] def collectSome[A](opts: Option[A]*): List[A] =
105
(opts collect { case Some(field) field }).toList
11-
12-
/**
13-
* The Jsonapi JSON media type.
14-
*/
15-
val jsonapiMediaType = "application/vnd.api+json"
16-
17-
/**
18-
* The Jsonapi JSON media type as a [[spray.http.MediaType]].
19-
*/
20-
val `application/vnd.api+json` = MediaTypes.register(MediaType.custom(jsonapiMediaType))
21-
22-
implicit def jsonapiJsonConvertableMarshaller[T: JsonapiRootObjectWriter](implicit m: Marshaller[RootObject]): Marshaller[T] =
23-
Marshaller.delegate[T, RootObject](`application/vnd.api+json`)(Jsonapi.asRootObject(_))
24-
25-
implicit def jsonapiJsonConvertableUnmarshaller[T: JsonapiRootObjectReader](implicit u: Unmarshaller[RootObject]): Unmarshaller[T] =
26-
Unmarshaller.delegate[RootObject, T](`application/vnd.api+json`)(Jsonapi.fromRootObject(_))
276
}

src/main/scala/org/zalando/jsonapi/json/playjson/PlayJsonJsonapiSupport.scala

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
1-
package org.zalando.jsonapi.json
2-
package playjson
1+
package org.zalando.jsonapi.json.playjson
32

4-
import org.zalando.jsonapi.model.RootObject
5-
import play.api.libs.json.{ Json, JsValue }
63
import spray.httpx.PlayJsonSupport
74
import spray.httpx.marshalling.Marshaller
85
import spray.httpx.unmarshalling.Unmarshaller
6+
import org.zalando.jsonapi.model.RootObject
7+
import play.api.libs.json.{ JsValue, Json }
8+
import spray.http.MediaTypes.`application/vnd.api+json`
99

1010
trait PlayJsonJsonapiSupport extends PlayJsonJsonapiFormat with PlayJsonSupport {
11+
1112
implicit val playJsonJsonapiMarshaller =
1213
Marshaller.delegate[RootObject, JsValue](`application/vnd.api+json`)(Json.toJson(_))
1314

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package org.zalando.jsonapi.json.sprayhttpx
2+
3+
import org.zalando.jsonapi.model.RootObject
4+
import org.zalando.jsonapi.{ Jsonapi, JsonapiRootObjectReader, JsonapiRootObjectWriter }
5+
import spray.http.MediaTypes.`application/vnd.api+json`
6+
import spray.httpx.marshalling.Marshaller
7+
import spray.httpx.unmarshalling.Unmarshaller
8+
9+
trait SprayJsonapiSupport {
10+
11+
implicit def jsonapiJsonConvertableMarshaller[T: JsonapiRootObjectWriter](implicit m: Marshaller[RootObject]): Marshaller[T] =
12+
Marshaller.delegate[T, RootObject](`application/vnd.api+json`)(Jsonapi.asRootObject(_))
13+
14+
implicit def jsonapiJsonConvertableUnmarshaller[T: JsonapiRootObjectReader](implicit u: Unmarshaller[RootObject]): Unmarshaller[T] =
15+
Unmarshaller.delegate[RootObject, T](`application/vnd.api+json`)(Jsonapi.fromRootObject(_))
16+
17+
}

src/main/scala/org/zalando/jsonapi/json/sprayjson/SprayJsonJsonapiFormat.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ trait SprayJsonJsonapiFormat {
5353
json match {
5454
case obj: JsObject obj.convertTo[ResourceObject]
5555
case arr: JsArray ResourceObjects(arr.convertTo[List[ResourceObject]])
56-
case _ throwDesEx(s"Unable to serialize Data type from json: $json")
56+
case _ deserializationError(s"Unable to serialize Data type from json: $json")
5757
}
5858
}
5959
}

src/main/scala/org/zalando/jsonapi/json/sprayjson/SprayJsonJsonapiSupport.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,10 @@ import org.zalando.jsonapi.model.RootObject
55
import spray.httpx.unmarshalling.Unmarshaller
66
import spray.json._
77
import spray.httpx.marshalling.Marshaller
8+
import spray.http.MediaTypes.`application/vnd.api+json`
89

910
trait SprayJsonJsonapiSupport extends SprayJsonJsonapiFormat with DefaultJsonProtocol {
11+
1012
implicit def sprayJsonJsonapiMarshaller(implicit printer: JsonPrinter = PrettyPrinter) =
1113
Marshaller.delegate[RootObject, String](`application/vnd.api+json`) { jsonapi
1214
printer(jsonapi.toJson)

src/main/scala/org/zalando/jsonapi/json/sprayjson/SprayJsonReadSupport.scala

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ private[json] object SprayJsonReadSupport {
1515

1616
def field(fieldName: String): JsValue = obj.getFields(fieldName).toList match {
1717
case Seq(value) value
18-
case x throwDesEx(s"No value for fieldName $fieldName in $obj: $x")
18+
case x deserializationError(s"No value for fieldName $fieldName in $obj: $x")
1919
}
2020

2121
def \(fieldName: String): JsValue = field(fieldName)
@@ -26,22 +26,18 @@ private[json] object SprayJsonReadSupport {
2626
implicit class RichJsValue(val v: JsValue) extends AnyVal {
2727
def asString: String = v match {
2828
case JsString(s) s
29-
case x throwDesEx(s"$x is not a JSON string")
29+
case x deserializationError(s"$x is not a JSON string")
3030
}
3131

3232
def asStringSeq: Seq[String] = v match {
3333
case JsArray(elements)
3434
elements map {
3535
case JsString(s) s
36-
case x throwDesEx(s"$x is not a JSON string")
36+
case x deserializationError(s"$x is not a JSON string")
3737
}
38-
case x throwDesEx(s"$x is not a JSON array")
38+
case x
39+
deserializationError(s"$x is not a JSON array")
3940
}
4041
}
4142

42-
/**
43-
* Throws a Spray [[DeserializationException]] with the given message.
44-
*/
45-
private[json] def throwDesEx(msg: String) = throw new DeserializationException(msg)
46-
47-
}
43+
}

src/test/scala/org/zalando/jsonapi/json/ExampleSpec.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
package org.zalando.jsonapi.json
22

33
import org.scalatest.{ MustMatchers, WordSpec }
4-
import org.zalando.jsonapi.json.sprayjson.{ SprayJsonJsonapiProtocol, SprayJsonJsonapiProtocol$ }
5-
import org.zalando.jsonapi.{ JsonapiRootObjectWriter, _ }
4+
import org.zalando.jsonapi.json.sprayjson.SprayJsonJsonapiProtocol
65
import org.zalando.jsonapi.model.JsonApiObject.StringValue
76
import org.zalando.jsonapi.model.RootObject.ResourceObject
87
import org.zalando.jsonapi.model.{ Attribute, Links, RootObject }
8+
import org.zalando.jsonapi.{ JsonapiRootObjectWriter, _ }
99
import spray.json._
1010

1111
class ExampleSpec extends WordSpec with MustMatchers with SprayJsonJsonapiProtocol {

src/test/scala/org/zalando/jsonapi/json/JsonapiSupportSpec.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@ package org.zalando.jsonapi.json
22

33
import org.scalactic.TypeCheckedTripleEquals
44
import org.scalatest.{ EitherValues, WordSpec }
5-
import org.zalando.jsonapi.{ JsonapiRootObjectReader, JsonapiRootObjectWriter }
5+
import org.zalando.jsonapi.JsonapiRootObjectWriter
6+
import org.zalando.jsonapi.json.sprayhttpx.SprayJsonapiSupport
67
import org.zalando.jsonapi.model.{ JsonApiObject, JsonApiProperty, RootObject }
7-
import spray.http.HttpEntity
88
import spray.httpx.marshalling._
99
import spray.httpx.unmarshalling._
1010

11-
trait JsonapiSupportSpec extends WordSpec with TypeCheckedTripleEquals with EitherValues {
11+
trait JsonapiSupportSpec extends WordSpec with TypeCheckedTripleEquals with EitherValues with SprayJsonapiSupport {
1212
def jsonapiSupportClassName: String
1313
implicit def jsonapiRootObjectMarshaller: Marshaller[RootObject]
1414
implicit def jsonapiRootObjectUnmarshaller: Unmarshaller[RootObject]

version.sbt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
version in ThisBuild := "0.3.4"
1+
version in ThisBuild := "0.3.5-SNAPSHOT"

0 commit comments

Comments
 (0)