]> gitweb.factorcode.org Git - factor.git/commitdiff
json.writer: Ability to turn jsvar-encode substituion on/off via jsvar-encode? dynami...
authorotoburb <otoburb@gmail.com>
Thu, 23 Jun 2011 05:28:24 +0000 (01:28 -0400)
committerotoburb <otoburb@gmail.com>
Tue, 5 Jul 2011 03:16:38 +0000 (03:16 +0000)
basis/json/writer/writer-tests.factor
basis/json/writer/writer.factor

index 692a264d0aace72afd76796d0275ad4058fff41d..7f99456cf227d40198bfe6fa9ce508755fd301d2 100644 (file)
@@ -1,4 +1,4 @@
-USING: json.writer tools.test json.reader json ;
+USING: hashtables json.writer tools.test json.reader json kernel namespaces ;
 IN: json.writer.tests
 
 { "false" } [ f >json ] unit-test
@@ -18,3 +18,19 @@ SYMBOL: testSymbol
 { """"testSymbol"""" } [ testSymbol >json ] unit-test
 
 [ { 0.5 } ] [ { 1/2 } >json json> ] unit-test
+
+[ "{\"b-b\":\"asdf\"}" ] 
+    [ f jsvar-encode? [ "asdf" "b-b" associate >json ] with-variable ] unit-test
+
+[ "{\"b_b\":\"asdf\"}" ]
+    [ t jsvar-encode? [ "asdf" "b-b" associate >json ] with-variable ] unit-test
+
+TUPLE: person name age a-a ;
+[ "{\"name\":\"David-David\",\"age\":32,\"a_a\":{\"b_b\":\"asdf\"}}" ]
+    [ t jsvar-encode? 
+        [ "David-David" 32 H{ { "b-b" "asdf" } } person boa >json ] 
+        with-variable ] unit-test
+[ "{\"name\":\"Alpha-Beta\",\"age\":32,\"a-a\":{\"b-b\":\"asdf\"}}" ]
+    [ f jsvar-encode? 
+        [ "Alpha-Beta" 32 H{ { "b-b" "asdf" } } person boa >json ] 
+        with-variable ] unit-test
index e374919039aedeb2bb0ab078552df33597b822a7..65ef7aebe327e0bc07ae23da0e905104fa891422 100644 (file)
@@ -2,7 +2,7 @@
 ! See http://factorcode.org/license.txt for BSD license.
 USING: accessors kernel io.streams.string io strings splitting
 sequences math math.parser assocs classes words namespaces make
-prettyprint hashtables mirrors tr json ;
+prettyprint hashtables mirrors tr json fry ;
 IN: json.writer
 
 #! Writes the object out to a stream in JSON format
@@ -33,20 +33,23 @@ M: real json-print ( num -- )
 M: sequence json-print ( array -- ) 
     CHAR: [ write1 [ >json ] map "," join write CHAR: ] write1 ;
 
-TR: jsvar-encode "-" "_" ;
+SYMBOL: jsvar-encode?
+t jsvar-encode? set-global
+TR: jsvar-encode "-" "_" ; 
   
 : tuple>fields ( object -- seq )
-    <mirror> [
-        [ swap jsvar-encode >json % " : " % >json % ] "" make
-    ] { } assoc>map ;
+    <mirror>
+    jsvar-encode? get
+    '[ [ swap _ [ jsvar-encode ] when >json % ":" % >json % ] "" make ] { } assoc>map ;
 
 M: tuple json-print ( tuple -- )
     CHAR: { write1 tuple>fields "," join write CHAR: } write1 ;
 
 M: hashtable json-print ( hashtable -- )
     CHAR: { write1 
-    [ [ swap jsvar-encode >json % CHAR: : , >json % ] "" make ]
-    { } assoc>map "," join write 
+    jsvar-encode? get
+    '[ [ swap _ [ jsvar-encode ] when >json % CHAR: : , >json % ] "" make ] { } assoc>map
+    "," join write 
     CHAR: } write1 ;
 
 M: word json-print name>> json-print ;