]> gitweb.factorcode.org Git - factor.git/commitdiff
assoc>query should not insert = if value is f. Reported by Chris Double
authorSlava Pestov <slava@slava-pestovs-macbook-pro.local>
Fri, 10 Apr 2009 09:01:59 +0000 (04:01 -0500)
committerSlava Pestov <slava@slava-pestovs-macbook-pro.local>
Fri, 10 Apr 2009 09:01:59 +0000 (04:01 -0500)
basis/urls/encoding/encoding-tests.factor
basis/urls/encoding/encoding.factor
basis/urls/urls-tests.factor

index 87b1812ef8dccf3c4700a90a862c4fdf7e45532c..78e31a764df16020d3debd71f959eb7cd8ce17b4 100644 (file)
@@ -26,3 +26,7 @@ USING: urls.encoding tools.test arrays kernel assocs present accessors ;
 [ H{ { "text" "hello world" } } ] [ "text=hello+world" query>assoc ] unit-test
 
 [ "a=3" ] [ { { "a" 3 } } assoc>query ] unit-test
+
+[ "a" ] [ { { "a" f } } assoc>query ] unit-test
+
+[ H{ { "a" f } } ] [ "a" query>assoc ] unit-test
\ No newline at end of file
index 7fed4b5f58736b7d142b7dbf8853c8670a6c0b67..15b71ac0dbc37b617bad000b810d7acba3d0c3c3 100644 (file)
@@ -72,6 +72,15 @@ PRIVATE>
         ] when*
     ] 2keep set-at ;
 
+: assoc-strings ( assoc -- assoc' )
+    [
+        {
+            { [ dup not ] [ ] }
+            { [ dup array? ] [ [ present ] map ] }
+            [ present 1array ]
+        } cond
+    ] assoc-map ;
+
 PRIVATE>
 
 : query>assoc ( query -- assoc )
@@ -86,11 +95,8 @@ PRIVATE>
 
 : assoc>query ( assoc -- str )
     [
-        dup array? [ [ present ] map ] [ present 1array ] if
-    ] assoc-map
-    [
-        [
+        assoc-strings [
             [ url-encode ] dip
-            [ url-encode "=" glue , ] with each
+            [ [ url-encode "=" glue , ] with each ] [ , ] if*
         ] assoc-each
     ] { } make "&" join ;
index f45ad6449e206498393d1641334fcd1576b5c7b2..f2ecd6ec6921d0ecf6e6883e7b875c52865cd482 100644 (file)
@@ -80,6 +80,15 @@ CONSTANT: urls
             }
             "ftp://slava:secret@ftp.kernel.org/"
         }
+        {
+            T{ url
+               { protocol "http" }
+               { host "foo.com" }
+               { path "/" }
+               { query H{ { "a" f } } }
+            }
+            "http://foo.com/?a"
+        }
     }
 
 urls [