Class: ZendeskAPI::Middleware::Request::EtagCache
- Inherits:
-
Faraday::Middleware
- Object
- Faraday::Middleware
- ZendeskAPI::Middleware::Request::EtagCache
- Defined in:
- lib/zendesk_api/middleware/request/etag_cache.rb
Overview
Request middleware that caches responses based on etags can be removed once this is merged: github.com/pengwynn/faraday_middleware/pull/42
Instance Method Summary collapse
- #call(env) ⇒ Object
-
#initialize(app, options = {}) ⇒ EtagCache
constructor
A new instance of EtagCache.
Constructor Details
#initialize(app, options = {}) ⇒ EtagCache
Returns a new instance of EtagCache.
9 10 11 12 13 14 |
# File 'lib/zendesk_api/middleware/request/etag_cache.rb', line 9 def initialize(app, = {}) @app = app @cache = [:cache] || raise("need :cache option e.g. ActiveSupport::Cache::MemoryStore.new") @cache_key_prefix = .fetch(:cache_key_prefix, :faraday_etags) end |
Instance Method Details
#call(env) ⇒ Object
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/zendesk_api/middleware/request/etag_cache.rb', line 16 def call(env) return @app.call(env) unless [:get, :head].include?(env[:method]) cache_key = [@cache_key_prefix, env[:url].to_s] # send known etag if cached = @cache.read(cache_key) env[:request_headers]["If-None-Match"] ||= cached[:response_headers]["Etag"] end @app.call(env).on_complete do if cached && env[:status] == 304 # not modified env[:body] = cached[:body] end if env[:status] == 200 && env[:response_headers]["Etag"] # modified and cacheable @cache.write(cache_key, env) end end end |