Sha256: c8335dd5c5b0225ce0b960ceae73e4512f588fdafec4908765a4b7ef07627965

Contents?: true

Size: 1.73 KB

Versions: 4

Compression:

Stored size: 1.73 KB

Contents

require 'http/cookie_jar'

# CookiestxtSaver saves and loads cookies in the cookies.txt format.
class HTTP::CookieJar::CookiestxtSaver < HTTP::CookieJar::AbstractSaver
  True  = "TRUE"
  False = "FALSE"

  def save(io, jar)
    io.puts @header if @header
    jar.each { |cookie|
      next if !@session && cookie.session?
      io.print cookie_to_record(cookie)
    }
  end

  def load(io, jar)
    io.each_line { |line|
      cookie = parse_record(line) and jar.add(cookie)
    }
  end

  private

  def default_options
    {
      header: "# HTTP Cookie File",
      linefeed: "\n",
    }
  end

  # Serializes the cookie into a cookies.txt line.
  def cookie_to_record(cookie)
    cookie.instance_eval {
      [
        @domain,
        @for_domain ? True : False,
        @path,
        @secure ? True : False,
        @expires.to_i,
        @name,
        @value
      ]
    }.join("\t") << @linefeed
  end

  # Parses a line from cookies.txt and returns a cookie object if the
  # line represents a cookie record or returns nil otherwise.
  def parse_record(line)
    return nil if line.match(/^#/)

    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,
      :expires => expires,
      :version => 0)
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
http-cookie-0.1.4 lib/http/cookie_jar/cookiestxt_saver.rb
http-cookie-0.1.2 lib/http/cookie_jar/cookiestxt_saver.rb
http-cookie-0.1.1 lib/http/cookie_jar/cookiestxt_saver.rb
http-cookie-0.1.0 lib/http/cookie_jar/cookiestxt_saver.rb