Class: Async::HTTP::Cache::Store::Vary

Inherits:
Object
  • Object
show all
Defined in:
lib/async/http/cache/store/vary.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(delegate, vary = {}) ⇒ Vary

Returns a new instance of Vary.



31
32
33
34
# File 'lib/async/http/cache/store/vary.rb', line 31

def initialize(delegate, vary = {})
  @delegate = delegate
  @vary = vary
end

Instance Attribute Details

#delegateObject (readonly)

Returns the value of attribute delegate.



40
41
42
# File 'lib/async/http/cache/store/vary.rb', line 40

def delegate
  @delegate
end

Instance Method Details

#closeObject



36
37
38
# File 'lib/async/http/cache/store/vary.rb', line 36

def close
  @delegate.close
end

#insert(key, request, response) ⇒ Object



65
66
67
68
69
70
71
72
73
# File 'lib/async/http/cache/store/vary.rb', line 65

def insert(key, request, response)
  if vary = response.headers[VARY]&.sort
    @vary[key] = vary
    
    key = key + key_for(request.headers, vary)
  end
  
  @delegate.insert(key, request, response)
end

#key_for(headers, vary) ⇒ Object



52
53
54
# File 'lib/async/http/cache/store/vary.rb', line 52

def key_for(headers, vary)
  vary.map{|key| headers[key]}
end

#lookup(key, request) ⇒ Object



56
57
58
59
60
61
62
63
# File 'lib/async/http/cache/store/vary.rb', line 56

def lookup(key, request)
  if vary = @vary[key]
    # We should provide user-supported normalization here:
    key = key + key_for(request.headers, vary)
  end
  
  return @delegate.lookup(key, request)
end

#normalize(request) ⇒ Object



42
43
44
45
46
47
48
49
50
# File 'lib/async/http/cache/store/vary.rb', line 42

def normalize(request)
  if accept_encoding = request.headers[ACCEPT_ENCODING]
    if accept_encoding.include?("gzip")
      request.headers.set(ACCEPT_ENCODING, "gzip")
    else
      request.headers.delete(ACCEPT_ENCODING)
    end
  end
end