-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Initial implementation of Play-JSON conversion
- Loading branch information
1 parent
37a73ec
commit 6ef6236
Showing
3 changed files
with
117 additions
and
0 deletions.
There are no files selected for viewing
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
20 changes: 20 additions & 0 deletions
20
play-nunjucks/src/main/scala/wolfendale/playnunjucks/PlayJsonConverter.scala
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
package wolfendale.playnunjucks | ||
|
||
import play.api.libs.json.{JsArray, JsBoolean, JsNull, JsNumber, JsObject, JsString, JsValue} | ||
import wolfendale.nunjucks.expression.runtime.Value | ||
import wolfendale.nunjucks.expression.runtime.Value._ | ||
|
||
class PlayJsonConverter { | ||
|
||
def convert(js: JsValue): Value = js match { | ||
case JsNull => Null | ||
case boolean: JsBoolean => Bool(boolean.value) | ||
case JsNumber(value) => Number(value.doubleValue()) | ||
case JsString(value) => Str(value) | ||
case JsArray(value) => Arr(value.map(convert)) | ||
case JsObject(underlying) => | ||
val map = underlying.map({case (key, value) => (key, convert(value))}) | ||
Obj(map.toArray:_*) | ||
} | ||
|
||
} |
85 changes: 85 additions & 0 deletions
85
play-nunjucks/src/test/scala/wolfendale/playnunjucks/PlayJsonConverterSpec.scala
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,85 @@ | ||
package wolfendale.playnunjucks | ||
|
||
import org.scalatest.{FreeSpec, MustMatchers} | ||
import play.api.libs.json.{JsArray, JsBoolean, JsNull, JsNumber, JsObject, JsString} | ||
import wolfendale.nunjucks.expression.runtime.Value | ||
import wolfendale.nunjucks.expression.runtime.Value._ | ||
|
||
class PlayJsonConverterSpec extends FreeSpec with MustMatchers { | ||
|
||
val converter: PlayJsonConverter = new PlayJsonConverter | ||
|
||
"PlayJsonConverter" - { | ||
|
||
"should convert null" in { | ||
converter.convert(JsNull) mustEqual Null | ||
} | ||
|
||
"should convert boolean true" in { | ||
converter.convert(JsBoolean(true)) mustEqual Bool(true) | ||
} | ||
|
||
"should convert boolean false" in { | ||
converter.convert(JsBoolean(false)) mustEqual Bool(false) | ||
} | ||
|
||
"should convert zero" in { | ||
converter.convert(JsNumber(0)) mustEqual Number(0) | ||
} | ||
|
||
"should convert positive integers" in { | ||
converter.convert(JsNumber(1)) mustEqual Number(1) | ||
} | ||
|
||
"should convert negative integers" in { | ||
converter.convert(JsNumber(-1)) mustEqual Number(-1) | ||
} | ||
|
||
"should convert positive doubles" in { | ||
converter.convert(JsNumber(1.5)) mustEqual Number(1.5) | ||
} | ||
|
||
"should convert negative doubles" in { | ||
converter.convert(JsNumber(-1.5)) mustEqual Number(-1.5) | ||
} | ||
|
||
"should convert empty strings" in { | ||
converter.convert(JsString("")) mustEqual Str("") | ||
} | ||
|
||
"should convert non-empty strings" in { | ||
converter.convert(JsString("hello")) mustEqual Str("hello") | ||
} | ||
|
||
"should convert empty arrays" in { | ||
converter.convert(JsArray()) mustEqual Arr(Seq.empty) | ||
} | ||
|
||
"should convert non-empty arrays" in { | ||
converter.convert(JsArray(Seq(JsString("hello"), JsString("world")))) mustEqual Arr(Seq(Str("hello"), Str("world"))) | ||
} | ||
|
||
"should convert simple objects" in { | ||
converter.convert(JsObject(Seq( | ||
("string", JsString("string")), | ||
("number", JsNumber(1)), | ||
("null", JsNull) | ||
))) | ||
} | ||
|
||
"should convert nested objects" in { | ||
converter.convert(JsObject(Seq( | ||
("string", JsString("string")), | ||
("number", JsNumber(1)), | ||
("null", JsNull), | ||
("nested", JsObject(Seq( | ||
("string", JsString("string")), | ||
("number", JsNumber(1)), | ||
("null", JsNull) | ||
))) | ||
))) | ||
} | ||
|
||
} | ||
|
||
} |