summary refs log tree commit
diff options
context:
space:
mode:
authorSimon Chiang <simon.a.chiang@gmail.com>2009-05-15 22:53:04 +0800
committerJoshua Peek <josh@joshpeek.com>2009-05-16 00:14:35 +0800
commit1189b1e7f11aa62b8c5ff25441bfdac186fadcc1 (patch)
tree268366c7bd565cf16e9b0d7c0d5089e978d58872
parent0bf8d8e840ae226d6efed8af345feb67a10f6aa6 (diff)
downloadrack-1189b1e7f11aa62b8c5ff25441bfdac186fadcc1.tar.gz
optimizations of parse/build query
Signed-off-by: Joshua Peek <josh@joshpeek.com>
-rw-r--r--lib/rack/utils.rb12
1 files changed, 7 insertions, 5 deletions
diff --git a/lib/rack/utils.rb b/lib/rack/utils.rb
index 42e2e698..050d381c 100644
--- a/lib/rack/utils.rb
+++ b/lib/rack/utils.rb
@@ -26,15 +26,17 @@ module Rack
     end
     module_function :unescape
 
+    DEFAULT_SEP = /[&;] */n
+    
     # Stolen from Mongrel, with some small modifications:
     # Parses a query string by breaking it up at the '&'
     # and ';' characters.  You can also use this to parse
     # cookies by changing the characters used in the second
     # parameter (which defaults to '&;').
-    def parse_query(qs, d = '&;')
+    def parse_query(qs, d = nil)
       params = {}
 
-      (qs || '').split(/[#{d}] */n).each do |p|
+      (qs || '').split(d ? /[#{d}] */n : DEFAULT_SEP).each do |p|
         k, v = unescape(p).split('=', 2)
 
         if cur = params[k]
@@ -52,10 +54,10 @@ module Rack
     end
     module_function :parse_query
 
-    def parse_nested_query(qs, d = '&;')
+    def parse_nested_query(qs, d = nil)
       params = {}
 
-      (qs || '').split(/[#{d}] */n).each do |p|
+      (qs || '').split(d ? /[#{d}] */n : DEFAULT_SEP).each do |p|
         k, v = unescape(p).split('=', 2)
         normalize_params(params, k, v)
       end
@@ -101,7 +103,7 @@ module Rack
         if v.class == Array
           build_query(v.map { |x| [k, x] })
         else
-          escape(k) + "=" + escape(v)
+          "#{escape(k)}=#{escape(v)}"
         end
       }.join("&")
     end