add(): Stop deleting an existing cookie when storing an expired cookie.

This is a backout of what I've done previously.  Expiration check is
better done in extraction where a user can optionally specify a base
date.

Add an internal method delete() to delete an existing cookie.
This commit is contained in:
Akinori MUSHA 2013-03-27 14:58:22 +09:00
parent bd3ae6c1ae
commit 299bb24550

View file

@ -40,17 +40,18 @@ class HTTP::CookieJar
def add(cookie)
path_cookies = ((@jar[cookie.domain_name.hostname] ||= {})[cookie.path] ||= {})
if cookie.expired?
path_cookies.delete(cookie.name)
else
path_cookies[cookie.name] = cookie
cleanup if (@gc_index += 1) >= GC_THRESHOLD
end
path_cookies[cookie.name] = cookie
cleanup if (@gc_index += 1) >= GC_THRESHOLD
self
end
def delete(cookie)
path_cookies = ((@jar[cookie.domain_name.hostname] ||= {})[cookie.path] ||= {})
path_cookies.delete(cookie.name)
self
end
private :delete
def each(uri = nil)
if uri
thost = DomainName.new(uri.host)
@ -118,7 +119,7 @@ class HTTP::CookieJar
if (debt = domain_cookies.size - HTTP::Cookie::MAX_COOKIES_PER_DOMAIN) > 0
domain_cookies.sort_by!(&:created_at)
domain_cookies.slice!(0, debt).each { |cookie|
add(cookie.expire!)
delete(cookie)
}
end
@ -128,7 +129,7 @@ class HTTP::CookieJar
if (debt = all_cookies.size - HTTP::Cookie::MAX_COOKIES_TOTAL) > 0
all_cookies.sort_by!(&:created_at)
all_cookies.slice!(0, debt).each { |cookie|
add(cookie.expire!)
delete(cookie)
}
end