36 lines
808 B
Ruby
36 lines
808 B
Ruby
require 'delegate'
|
|
require 'webrick/cookie'
|
|
|
|
class WEBrick::Cookie
|
|
def expired?
|
|
!!expires && expires < Time.now
|
|
end
|
|
end
|
|
|
|
module Anemone
|
|
class CookieStore < DelegateClass(Hash)
|
|
|
|
def initialize(cookies = nil)
|
|
@cookies = {}
|
|
cookies.each { |name, value| @cookies[name] = WEBrick::Cookie.new(name, value) } if cookies
|
|
super(@cookies)
|
|
end
|
|
|
|
def merge!(set_cookie_str)
|
|
begin
|
|
cookie_hash = WEBrick::Cookie.parse_set_cookies(set_cookie_str).inject({}) do |hash, cookie|
|
|
hash[cookie.name] = cookie if !!cookie
|
|
hash
|
|
end
|
|
@cookies.merge! cookie_hash
|
|
rescue
|
|
end
|
|
end
|
|
|
|
def to_s
|
|
@cookies.values.reject { |cookie| cookie.expired? }.map { |cookie| "#{cookie.name}=#{cookie.value}" }.join(';')
|
|
end
|
|
|
|
end
|
|
end
|