Class: Rack::Client::CookieJar::Context

Inherits:
Object
  • Object
show all
Includes:
Options, DualBand
Defined in:
lib/rack/client/middleware/cookie_jar/context.rb

Instance Method Summary collapse

Methods included from DualBand

#call

Methods included from Options

#initialize_options, option_accessor, option_name, #options, #options=

Constructor Details

#initialize(app, options = {}) ⇒ Context

Returns a new instance of Context.



8
9
10
11
12
# File 'lib/rack/client/middleware/cookie_jar/context.rb', line 8

def initialize(app, options = {})
  @app = app

  initialize_options options
end

Instance Method Details

#async_call(env) ⇒ Object



27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/rack/client/middleware/cookie_jar/context.rb', line 27

def async_call(env)
  request = Request.new(env)
  cookies = lookup(request)
  request.inject(cookies)

  @app.call(request.env) do |request_parts|
    response  = Response.new(*request_parts)
    cookies   = Cookie.merge(cookies, response.cookies)
    store cookies

    response['rack-client-cookiejar.cookies'] = cookies.map {|c| c.to_header } * ', ' unless cookies.empty?
    yield response.finish
  end
end

#cookiestoreObject



52
53
54
55
# File 'lib/rack/client/middleware/cookie_jar/context.rb', line 52

def cookiestore
  uri = options['rack-client-cookiejar.cookiestore']
  storage.resolve_cookiestore_uri(uri)
end

#lookup(request) ⇒ Object



42
43
44
# File 'lib/rack/client/middleware/cookie_jar/context.rb', line 42

def lookup(request)
  cookiestore.match(request.host, request.path)
end

#store(cookies) ⇒ Object



46
47
48
49
50
# File 'lib/rack/client/middleware/cookie_jar/context.rb', line 46

def store(cookies)
  cookies.each do |cookie|
    cookiestore.store(cookie)
  end
end

#sync_call(env) ⇒ Object



14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/rack/client/middleware/cookie_jar/context.rb', line 14

def sync_call(env)
  request = Request.new(env)
  cookies = lookup(request)
  request.inject(cookies)

  response = Response.new(*@app.call(request.env))
  cookies = Cookie.merge(cookies, response.cookies)
  store cookies

  response['rack-client-cookiejar.cookies'] = cookies.map {|c| c.to_header } * ', ' unless cookies.empty?
  response.finish
end