class SonarCookies::Cookie

Attributes

default_host[R]
domain[R]
expires[R]
name[R]
path[R]
raw[R]
value[R]

Public Class Methods

new(raw, uri) click to toggle source
# File lib/sonar/cookies.rb, line 69
def initialize raw, uri
  @default_host = ::SonarConstants::DEFAULT_HOST

  uri ||= default_uri
  uri.host ||= default_host

  @raw, @options = raw.split(/[;,] */n, 2)
  @name, @value = parse_query(@raw, ';').to_a.first
  @options = parse_query(@options, ';')

  @domain = @options['domain'] || uri.host || default_host
  @domain = '.' << @domain unless @domain =~ /\A\./

  @path = @options['path'] || uri.path.sub(/\/[^\/]*\Z/, '')

  (expires = @options['expires']) && (@expires = ::Time.parse(expires))
end

Public Instance Methods

<=>(cookie) click to toggle source
# File lib/sonar/cookies.rb, line 116
def <=> cookie
  [name, path, domain.reverse] <=> [cookie.name, cookie.path, cookie.domain.reverse]
end
dispose_for?(uri) click to toggle source
# File lib/sonar/cookies.rb, line 103
def dispose_for? uri
  expired? ? false : valid?(uri)
end
empty?() click to toggle source
# File lib/sonar/cookies.rb, line 91
def empty?
  value.nil? || value.empty?
end
expired?() click to toggle source
# File lib/sonar/cookies.rb, line 99
def expired?
  expires && expires < ::Time.now.gmtime
end
replaces?(cookie) click to toggle source
# File lib/sonar/cookies.rb, line 87
def replaces? cookie
  [name.downcase, domain, path] == [cookie.name.downcase, cookie.domain, cookie.path]
end
secure?() click to toggle source
# File lib/sonar/cookies.rb, line 95
def secure?
  @options.has_key?('secure')
end
valid?(uri = nil) click to toggle source
# File lib/sonar/cookies.rb, line 107
def valid? uri = nil
  uri ||= default_uri
  uri.host ||= default_host

  (secure? ? uri.scheme == 'https' : true) &&
      (uri.host =~ /#{::Regexp.escape(domain.sub(/\A\./, ''))}\Z/i) &&
      (uri.path =~ /\A#{::Regexp.escape(path)}/)
end

Private Instance Methods

default_uri() click to toggle source
# File lib/sonar/cookies.rb, line 121
def default_uri
  ::URI.parse('//' << default_host << '/')
end