From b366dbd952417a610913e05ad58024b7da03fdb8 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Sat, 23 Jul 2005 09:00:05 +0000 Subject: Improved performance with 5-30% through a series of Action Pack optimizations #1811 [Stefan Kaes] git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@1905 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- .../cgi_ext/cookie_performance_fix.rb | 60 ++++++++++++---------- 1 file changed, 32 insertions(+), 28 deletions(-) (limited to 'actionpack/lib/action_controller/cgi_ext/cookie_performance_fix.rb') diff --git a/actionpack/lib/action_controller/cgi_ext/cookie_performance_fix.rb b/actionpack/lib/action_controller/cgi_ext/cookie_performance_fix.rb index 225cea1905..1c30f82b19 100644 --- a/actionpack/lib/action_controller/cgi_ext/cookie_performance_fix.rb +++ b/actionpack/lib/action_controller/cgi_ext/cookie_performance_fix.rb @@ -23,28 +23,32 @@ class CGI #:nodoc: # servers. # # These keywords correspond to attributes of the cookie object. - def initialize(name = "", *value) - options = if name.kind_of?(String) - { "name" => name, "value" => value } - else - name - end - unless options.has_key?("name") + def initialize(name = '', *value) + if name.kind_of?(String) + @name = name + @value = Array(value) + @domain = nil + @expires = nil + @secure = false + @path = nil + else + @name = name['name'] + @value = Array(name['value']) + @domain = name['domain'] + @expires = name['expires'] + @secure = name['secure'] || false + @path = name['path'] + end + + unless @name raise ArgumentError, "`name' required" end - @name = options["name"] - @value = Array(options["value"]) # simple support for IE - if options["path"] - @path = options["path"] - else - %r|^(.*/)|.match(ENV["SCRIPT_NAME"]) - @path = ($1 or "") + unless @path + %r|^(.*/)|.match(ENV['SCRIPT_NAME']) + @path = ($1 or '') end - @domain = options["domain"] - @expires = options["expires"] - @secure = options["secure"] == true ? true : false super(@value) end @@ -102,20 +106,20 @@ class CGI #:nodoc: # def self.parse(raw_cookie) cookies = Hash.new([]) - return cookies unless raw_cookie - - raw_cookie.split(/; /).each do |pairs| - name, values = pairs.split('=',2) - next unless name and values - name = CGI::unescape(name) - values ||= "" - values = values.split('&').collect{|v| CGI::unescape(v) } - unless cookies.has_key?(name) - cookies[name] = new({ "name" => name, "value" => values }) + + if raw_cookie + raw_cookie.split(/; /).each do |pairs| + name, values = pairs.split('=',2) + next unless name and values + name = CGI::unescape(name) + values = values.split('&').collect!{|v| CGI::unescape(v) } + unless cookies.has_key?(name) + cookies[name] = new(name, *values) + end end end cookies end end # class Cookie -end \ No newline at end of file +end -- cgit v1.2.3