Class: SonarCookies

Inherits:
Object
  • Object
show all
Includes:
Rack::Utils
Defined in:
lib/sonar/cookies.rb

Defined Under Namespace

Classes: Cookie

Instance Method Summary collapse

Constructor Details

#initializeSonarCookies

Returns a new instance of SonarCookies.



4
5
6
# File 'lib/sonar/cookies.rb', line 4

def initialize
  @jar = {}
end

Instance Method Details

#[](name) ⇒ Object



14
15
16
17
# File 'lib/sonar/cookies.rb', line 14

def [] name
  cookies = to_hash
  cookies[name] && cookies[name].value
end

#[]=(name, value) ⇒ Object



19
20
21
# File 'lib/sonar/cookies.rb', line 19

def []= name, value
  persist '%s=%s' % [name, ::Rack::Utils.escape(value)]
end

#clearObject



27
28
29
# File 'lib/sonar/cookies.rb', line 27

def clear
  jar nil, []
end

#delete(name) ⇒ Object



23
24
25
# File 'lib/sonar/cookies.rb', line 23

def delete name
  jar nil, jar(nil).reject { |c| c.name == name }
end

#jar(uri, cookies = nil) ⇒ Object



8
9
10
11
12
# File 'lib/sonar/cookies.rb', line 8

def jar uri, cookies = nil
  host = (((uri && uri.host) || ::SonarConstants::DEFAULT_HOST).split('.')[-2..-1]||[]).join('.').downcase
  @jar[host] = cookies if cookies
  @jar[host] ||= []
end

#persist(raw_cookies, uri = nil) ⇒ Object



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/sonar/cookies.rb', line 37

def persist raw_cookies, uri = nil
  return unless raw_cookies.is_a?(String)

  # before adding new cookies, lets cleanup expired ones
  jar uri, jar(uri).reject { |c| c.expired? }

  raw_cookies = raw_cookies.strip.split("\n").reject { |c| c.empty? }

  raw_cookies.each do |raw_cookie|
    cookie = Cookie.new(raw_cookie, uri)
    cookie.valid?(uri) || next
    jar(uri, jar(uri).reject { |existing_cookie| cookie.replaces? existing_cookie })
    jar(uri) << cookie
  end
  jar(uri).sort!
end

#to_hash(uri = nil) ⇒ Object



58
59
60
61
62
# File 'lib/sonar/cookies.rb', line 58

def to_hash uri = nil
  jar(uri).inject({}) do |cookies, cookie|
    cookies.merge((uri ? cookie.dispose_for?(uri) : true) ? {cookie.name => cookie} : {})
  end
end

#to_s(uri = nil) ⇒ Object



54
55
56
# File 'lib/sonar/cookies.rb', line 54

def to_s uri = nil
  to_hash(uri).values.map { |c| c.raw }.join(';')
end