class WebAgent::Cookie

def discard?

def discard?
  @discard
end

def domain_orig?

def domain_orig?
  @domain_orig
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?
  @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|
(elem.scan(/"/).length % 2) == 0
f old_elem
 old_elem << sep << elem
lse
 ret << elem
 old_elem = nil
nd  
e
f old_elem
 old_elem << sep << elem
 ret << old_elem
 old_elem = nil
lse
 old_elem = elem.dup
nd

  }
  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')) )
urn false
  else
urn 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 !~ /([^=]*)(\=(.*))?/
urn
raise ArgumentError 'invalid cookie value'
  end
  @name = $1.strip
  @value = normalize_cookie_value($3)
  cookie_elem.each{|pair|
, value = pair.split(/=/, 2)  ## value may nil
.strip!
    value = normalize_cookie_value(value)
e key.downcase
n 'domain'
domain = value
n 'expires'
      @expires = nil
egin
 @expires = Time.parse(value).gmtime if value
escue ArgumentError
nd
n 'path'
path = value
n 'secure'
secure = true  ## value may nil, but must 'true'.
n 'httponly'
http_only = true  ## value may nil, but must 'true'.
e
# ignore

  }
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 use?

def use?
  @use
end