From 11a9df855965f68f2cc3a7f1befc6410d1a41eec Mon Sep 17 00:00:00 2001 From: Akinori MUSHA Date: Thu, 28 Mar 2013 01:46:42 +0900 Subject: [PATCH] Fix handling of the :for_domain option in HTTP::Cookie.new(). --- lib/http/cookie.rb | 5 ++++- test/test_http_cookie.rb | 16 ++++++++++++++-- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/lib/http/cookie.rb b/lib/http/cookie.rb index ef12ecb..136765b 100644 --- a/lib/http/cookie.rb +++ b/lib/http/cookie.rb @@ -170,7 +170,7 @@ class HTTP::Cookie raise ArgumentError, "wrong number of arguments (#{args.size} for 1-3)" end for_domain = false - max_age = origin = nil + domain = max_age = origin = nil attr_hash.each_pair { |key, val| skey = key.to_s.downcase if skey.sub!(/\?\z/, '') @@ -179,6 +179,8 @@ class HTTP::Cookie case skey when 'for_domain' for_domain = !!val + when 'domain' + domain = val when 'origin' origin = val when 'max_age' @@ -193,6 +195,7 @@ class HTTP::Cookie raise ArgumentError, "at least name and value must be specified" end @for_domain = for_domain + self.domain = domain if domain self.origin = origin if origin self.max_age = max_age if max_age end diff --git a/test/test_http_cookie.rb b/test/test_http_cookie.rb index 944ca2f..5ae4471 100644 --- a/test/test_http_cookie.rb +++ b/test/test_http_cookie.rb @@ -455,6 +455,19 @@ class TestHTTPCookie < Test::Unit::TestCase assert_equal 'key', cookie.name assert_equal 'value', cookie.value assert_equal expires, cookie.expires + assert_equal false, cookie.for_domain? + + cookie = HTTP::Cookie.new(:value => 'value', :name => 'key', :expires => expires.dup, :domain => '.example.com') + assert_equal 'key', cookie.name + assert_equal 'value', cookie.value + assert_equal expires, cookie.expires + assert_equal true, cookie.for_domain? + + cookie = HTTP::Cookie.new(:value => 'value', :name => 'key', :expires => expires.dup, :domain => 'example.com', :for_domain => false) + assert_equal 'key', cookie.name + assert_equal 'value', cookie.value + assert_equal expires, cookie.expires + assert_equal false, cookie.for_domain? cookie = HTTP::Cookie.new(:value => 'value', :name => 'key', :expires => expires.dup, :domain => 'example.org', :for_domain? => true) assert_equal 'key', cookie.name @@ -685,9 +698,8 @@ class TestHTTPCookie < Test::Unit::TestCase :domain => 'uk', :for_domain => true, :origin => nil)) - assert_equal true, cookie.for_domain? + assert_equal false, cookie.for_domain? assert_equal true, cookie.acceptable_from_uri?('http://uk/') - assert_equal true, cookie.for_domain? # bug: acceptable_from_uri? changed it to false assert_equal false, cookie.acceptable_from_uri?('http://foo.uk/') end