Sha256: 9d1516bb7160174da8ba9347c3fdec941d5bcd2435dfc216b3d5ac50875bce10

Contents?: true

Size: 1.97 KB

Versions: 2

Compression:

Stored size: 1.97 KB

Contents

require 'time'
require 'webrick/cookie'

module WWW
  class Mechanize
  # This class is used to represent an HTTP Cookie.
    class Cookie < WEBrick::Cookie
      def self.parse(uri, str, log = nil)
        return str.split(/,(?=[^;,]*=)|,$/).collect { |c|
          cookie_elem = c.split(/;+/)
          first_elem = cookie_elem.shift
          first_elem.strip!
          key, value = first_elem.split(/=/, 2)
          cookie = new(key, WEBrick::HTTPUtils.dequote(value))
          cookie_elem.each{|pair|
            pair.strip!
            key, value = pair.split(/=/, 2)
            if value
              value = WEBrick::HTTPUtils.dequote(value.strip)
            end
            case key.downcase
            when "domain"  then cookie.domain  = value.sub(/^\./, '')
            when "path"    then cookie.path    = value
            when 'expires'
              begin
                cookie.expires = Time::parse(value)
              rescue
                if log
                  log.warn("Couldn't parse expires: #{value}")
                end
              end
            when "max-age" then
              begin
                cookie.max_age = Integer(value)
              rescue
                log.warn("Couldn't parse max age '#{value}'") if log
                cookie.max_age = nil
              end
            when "comment" then cookie.comment = value
            when "version" then
              begin
                cookie.version = Integer(value)
              rescue
                log.warn("Couldn't parse version '#{value}'") if log
                cookie.version = nil
              end
            when "secure"  then cookie.secure = true
            end
          }

          cookie.path    ||= uri.path.to_s.sub(/[^\/]*$/, '')
          cookie.secure  ||= false
          cookie.domain  ||= uri.host
          # Move this in to the cookie jar
          yield cookie if block_given?
        }
      end
    
      def to_s
        "#{@name}=#{@value}"
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
mechanize-0.7.7 lib/www/mechanize/cookie.rb
mechanize-0.7.8 lib/www/mechanize/cookie.rb