diff --git a/README.md b/README.md index 50a6512..9dff626 100755 --- a/README.md +++ b/README.md @@ -46,10 +46,10 @@ The focus of this project is minimalism and flexibility. To that end, the featur ### Setup For SBT simply include: -`libraryDependencies += "org.typelevel" %%% "fabric-core" % "1.10.6"` +`libraryDependencies += "org.typelevel" %%% "fabric-core" % "1.10.7"` For parsing support include: -`libraryDependencies += "org.typelevel" %%% "fabric-io" % "1.10.6"` +`libraryDependencies += "org.typelevel" %%% "fabric-io" % "1.10.7"` ### Create diff --git a/core/shared/src/main/scala/fabric/package.scala b/core/shared/src/main/scala/fabric/package.scala index 6448309..00c51b0 100755 --- a/core/shared/src/main/scala/fabric/package.scala +++ b/core/shared/src/main/scala/fabric/package.scala @@ -47,7 +47,7 @@ package object fabric { /** * Create a Str from the supplied String */ - implicit def str(s: String): Str = Str(s) + implicit def str(s: String): Json = if (s == null) Null else Str(s) /** * Create a Num from the supplied String diff --git a/core/shared/src/main/scala/fabric/search/Search.scala b/core/shared/src/main/scala/fabric/search/Search.scala index f54215c..9e46c18 100644 --- a/core/shared/src/main/scala/fabric/search/Search.scala +++ b/core/shared/src/main/scala/fabric/search/Search.scala @@ -32,8 +32,8 @@ trait Search { object Search { implicit val rw: RW[Search] = RW.poly[Search]() { - case "query" => SearchQuery.rw - case "composite" => CompositeSearch.rw + case "searchQuery" => SearchQuery.rw + case "compositeSearch" => CompositeSearch.rw } def apply(entries: SearchEntry*): Search = SearchQuery(entries.toList) diff --git a/core/shared/src/test/scala/spec/RWSpecAuto.scala b/core/shared/src/test/scala/spec/RWSpecAuto.scala index 833379c..2de3765 100755 --- a/core/shared/src/test/scala/spec/RWSpecAuto.scala +++ b/core/shared/src/test/scala/spec/RWSpecAuto.scala @@ -118,6 +118,16 @@ class RWSpecAuto extends AnyWordSpec with Matchers { val json: Json = sample.asJson json should be(obj("color" -> "Green", "size" -> 9.2, "quantity" -> 15)) } + "verify persisting null String values works" in { + val user = User(null, "abc/123") + user.json should be( + obj( + "name" -> Null, + "_id" -> "abc/123", + "num" -> 123 + ) + ) + } // TODO: Enable once Scala 3 support for sealed traits is working // "supporting sealed traits" in { // val car: VehicleType = VehicleType.Car diff --git a/core/shared/src/test/scala/spec/TransformSpec.scala b/core/shared/src/test/scala/spec/TransformSpec.scala index 33bbdf1..963bb76 100644 --- a/core/shared/src/test/scala/spec/TransformSpec.scala +++ b/core/shared/src/test/scala/spec/TransformSpec.scala @@ -60,6 +60,17 @@ class TransformSpec extends AnyWordSpec with Matchers { val transformed = json.transform(Search("level1", "level2", "product")).move().filterOne(RemoveEmptyFilter) transformed should be(obj("name" -> "Product Name", "sku" -> 12345)) } + "rename a top-level entry" in { + val json = obj( + "name" -> "John Doe" + ) + val transformed = json.transform(Search("name")).rename("fullName") + transformed should be( + obj( + "fullName" -> "John Doe" + ) + ) + } "rename a simple object" in { val json = obj( "product" -> List(