summary refs log tree commit
diff options
context:
space:
mode:
authorJeremy Kemper <jeremy@bitsweat.net>2009-05-15 04:38:26 +0800
committerJoshua Peek <josh@joshpeek.com>2009-05-16 00:29:57 +0800
commit0bc566223c735d9efa3a1d0d925e8d7001760b85 (patch)
tree54473af2d948e32898dabd2dfd2121355a32be69
parent0ab6b6c96dc43bec8a02d72ad5c6b944ad30df91 (diff)
downloadrack-0bc566223c735d9efa3a1d0d925e8d7001760b85.tar.gz
Speed up common header reads by avoiding downcase
Signed-off-by: Joshua Peek <josh@joshpeek.com>
-rw-r--r--lib/rack/utils.rb10
1 files changed, 6 insertions, 4 deletions
diff --git a/lib/rack/utils.rb b/lib/rack/utils.rb
index 050d381c..2903273c 100644
--- a/lib/rack/utils.rb
+++ b/lib/rack/utils.rb
@@ -227,21 +227,23 @@ module Rack
       end
 
       def [](k)
-        super @names[k.downcase]
+        super(@names[k] ||= @names[k.downcase])
       end
 
       def []=(k, v)
         delete k
-        @names[k.downcase] = k
+        @names[k] = @names[k.downcase] = k
         super k, v
       end
 
       def delete(k)
-        super @names.delete(k.downcase)
+        canonical = k.downcase
+        super @names.delete(canonical)
+        @names.delete_if { |name,| name.downcase == canonical }
       end
 
       def include?(k)
-        @names.has_key? k.downcase
+        @names.include?(k) || @names.include?(k.downcase)
       end
 
       alias_method :has_key?, :include?