diff --git a/lib/http/cookie.rb b/lib/http/cookie.rb index be06148..6282e3c 100644 --- a/lib/http/cookie.rb +++ b/lib/http/cookie.rb @@ -89,7 +89,7 @@ class HTTP::Cookie # The Expires attribute value as a Time object. # - # The setter method accepts a Time object, a string representation + # The setter method accepts a Time / DateTime object, a string representation # of date/time that Time.parse can understand, or `nil`. # # Setting this value resets #max_age to nil. When #max_age is @@ -493,6 +493,8 @@ class HTTP::Cookie def expires= t case t when nil, Time + when DateTime + t = t.to_time else t = Time.parse(t) end diff --git a/test/test_http_cookie.rb b/test/test_http_cookie.rb index 6f8ce87..a01b46a 100644 --- a/test/test_http_cookie.rb +++ b/test/test_http_cookie.rb @@ -717,8 +717,22 @@ class TestHTTPCookie < Test::Unit::TestCase end def test_expiration - cookie = HTTP::Cookie.new(cookie_values) + expires = Time.now + 86400 + cookie = HTTP::Cookie.new(cookie_values(expires: expires)) + assert_equal(expires, cookie.expires) + assert_equal false, cookie.expired? + assert_equal true, cookie.expired?(cookie.expires + 1) + assert_equal false, cookie.expired?(cookie.expires - 1) + cookie.expire! + assert_equal true, cookie.expired? + end + + def test_expiration_using_datetime + expires = DateTime.now + 1 + cookie = HTTP::Cookie.new(cookie_values(expires: expires)) + + assert_equal(expires.to_time, cookie.expires) assert_equal false, cookie.expired? assert_equal true, cookie.expired?(cookie.expires + 1) assert_equal false, cookie.expired?(cookie.expires - 1)