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