lib/async/http/cache/store/vary.rb in async-http-cache-0.1.0 vs lib/async/http/cache/store/vary.rb in async-http-cache-0.1.1

- old
+ new

@@ -23,31 +23,54 @@ module Async module HTTP module Cache module Store VARY = 'vary' + ACCEPT_ENCODING = 'accept-encoding' class Vary - def initialize(store, vary = {}) - @store = store + def initialize(delegate, vary = {}) + @delegate = delegate @vary = vary end + def close + @delegate.close + end + + attr :delegate + + 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 + + def key_for(headers, vary) + vary.map{|key| headers[key]} + end + def lookup(key, request) if vary = @vary[key] # We should provide user-supported normalization here: - key = key + request.headers.extract(vary) + key = key + key_for(request.headers, vary) end - return @store.lookup(key, request) + return @delegate.lookup(key, request) end def insert(key, request, response) - if vary = response.headers[VARY] - key = key + request.headers.extract(vary) + if vary = response.headers[VARY]&.sort + @vary[key] = vary + + key = key + key_for(request.headers, vary) end - @store.insert(key, request, response) + @delegate.insert(key, request, response) end end end end end