class HTTP::CookieJar::CookiestxtSaver
CookiestxtSaver saves and loads cookies in the cookies.txt format.
def cookie_to_record(cookie)
def cookie_to_record(cookie) cookie.instance_eval { [ @httponly ? HTTPONLY_PREFIX + dot_domain : dot_domain, @for_domain ? True : False, @path, @secure ? True : False, expires.to_i, @name, @value ] }.join("\t") << @linefeed end
def default_options
def default_options { :header => "# HTTP Cookie File", :linefeed => "\n", } end
def load(io, jar)
def load(io, jar) io.each_line { |line| cookie = parse_record(line) and jar.add(cookie) } end
def parse_record(line)
Parses a line from cookies.txt and returns a cookie object if the
def parse_record(line) case line when RE_HTTPONLY_PREFIX httponly = true line = $' when /\A#/ return nil else httponly = false end domain, s_for_domain, # Whether this cookie is for domain path, # Path for which the cookie is relevant s_secure, # Requires a secure connection s_expires, # Time the cookie expires (Unix epoch time) name, value = line.split("\t", 7) return nil if value.nil? value.chomp! if (expires_seconds = s_expires.to_i).nonzero? expires = Time.at(expires_seconds) return nil if expires < Time.now end HTTP::Cookie.new(name, value, :domain => domain, :for_domain => s_for_domain == True, :path => path, :secure => s_secure == True, :httponly => httponly, :expires => expires) end
def save(io, jar)
def save(io, jar) io.puts @header if @header jar.each { |cookie| next if !@session && cookie.session? io.print cookie_to_record(cookie) } end