class WebAgent::Cookie

def self.parse(str, url)

def self.parse(str, url)
  cookie = new
  cookie.parse(str, url)
  cookie
end

def deprecated(old, new)

def deprecated(old, new)
  warning("WebAgent::Cookie is deprecated and will be replaced with HTTP::Cookie in the near future. Please use Cookie##{new} instead of Cookie##{old} for the replacement.")
end

def discard?

def discard?
  @discard
end

def domain

def domain
  warning('Cookie#domain returns dot-less domain name now. Use Cookie#dot_domain if you need "." at the beginning.')
  self.original_domain
end

def domain_orig?

def domain_orig?
  @domain_orig
end

def flag

def flag
  deprecated('flag', 'secure, for_domain, etc.')
  HTTPClient::WebAgentSaver.flag(self)
end

def flag

def flag
  flg = 0
  flg += USE  if @use
  flg += SECURE  if @secure
  flg += HTTP_ONLY  if @http_only
  flg += DOMAIN  if @domain_orig
  flg += PATH  if @path_orig
  flg += DISCARD if @discard
  flg += OVERRIDE if @override
  flg
end

def http_only?

def http_only?
  deprecated('http_only?', 'httponly?')
  self.httponly?
end

def http_only?

def http_only?
  @http_only
end

def initialize

def initialize
  @name = @value = @domain = @path = nil
  @expires = nil
  @url = nil
  @use = @secure = @http_only = @discard = @domain_orig = @path_orig = @override = nil
end

def join_quotedstr(array, sep)

def join_quotedstr(array, sep)
  ret = Array.new
  old_elem = nil
  array.each{|elem|
    if (elem.scan(/"/).length % 2) == 0
      if old_elem
        old_elem << sep << elem
      else
        ret << elem
        old_elem = nil
      end
    else
      if old_elem
        old_elem << sep << elem
        ret << old_elem
        old_elem = nil
      else
        old_elem = elem.dup
      end
    end
  }
  ret
end

def match?(url)

def match?(url)
  domainname = url.host
  if (!domainname ||
      !domain_match(domainname, @domain) ||
      (@path && !head_match?(@path, url.path.empty? ? '/' : url.path)) ||
      (@secure && (url.scheme != 'https')) )
    return false
  else
    return true
  end
end

def normalize_cookie_value(value)

def normalize_cookie_value(value)
  if value
    value = value.strip.sub(/\A"(.*)"\z/) { $1 }
    value = nil if value.empty?
  end
  value
end

def override?

def override?
  @override
end

def parse(str, url)

def parse(str, url)
  @url = url
  # TODO: should not depend on join_quotedstr. scan with escape like CSV.
  cookie_elem = str.split(/;/)
  cookie_elem = join_quotedstr(cookie_elem, ';')
  cookie_elem -= [""] # del empty elements, a cookie might included ";;"
  first_elem = cookie_elem.shift
  if first_elem !~ /([^=]*)(\=(.*))?/
    return
    ## raise ArgumentError 'invalid cookie value'
  end
  @name = $1.strip
  @value = normalize_cookie_value($3)
  cookie_elem.each{|pair|
    key, value = pair.split(/=/, 2)  ## value may nil
    key.strip!
    value = normalize_cookie_value(value)
    case key.downcase
    when 'domain'
      @domain = value
    when 'expires'
      @expires = nil
      begin
        @expires = Time.parse(value).gmtime if value
      rescue ArgumentError
      end
    when 'path'
      @path = value
    when 'secure'
      @secure = true  ## value may nil, but must 'true'.
    when 'httponly'
      @http_only = true  ## value may nil, but must 'true'.
    else
      warn("Unknown key: #{key} = #{value}")
    end
  }
end

def path_orig?

def path_orig?
  @path_orig
end

def secure?

def secure?
  @secure
end

def set_flag(flag)

def set_flag(flag)
  flag = flag.to_i
  @use = true      if flag & USE > 0
  @secure = true   if flag & SECURE > 0
  @http_only = true   if flag & HTTP_ONLY > 0
  @domain_orig = true if flag & DOMAIN > 0
  @path_orig = true if flag & PATH > 0
  @discard  = true if flag & DISCARD > 0
  @override = true if flag & OVERRIDE > 0
end

def url

def url
  deprecated('url', 'origin')
  self.origin
end

def url=(url)

def url=(url)
  deprecated('url=', 'origin=')
  self.origin = url
end

def use?

def use?
  @use
end