diff --git a/lib/faraday/http_cache.rb b/lib/faraday/http_cache.rb index c0ea00a..50271e0 100644 --- a/lib/faraday/http_cache.rb +++ b/lib/faraday/http_cache.rb @@ -279,10 +279,12 @@ def store(response) end def delete(request, response) - headers = %w[Location Content-Location] - headers.each do |header| - url = response.headers[header] - @strategy.delete(url) if url + response_headers = response.headers + if response_headers + %w[Location Content-Location].each do |header| + url = response_headers[header] + @strategy.delete(url) if url + end end @strategy.delete(request.url) diff --git a/spec/http_cache_spec.rb b/spec/http_cache_spec.rb index 0021173..ee7fbcc 100644 --- a/spec/http_cache_spec.rb +++ b/spec/http_cache_spec.rb @@ -107,6 +107,17 @@ client.post('delete-with-content-location') expect(client.get('get').body).to eq('2') end + + it 'invalidates the request url when the response has no headers' do + middleware = Faraday::HttpCache.new(->(env) { env }, logger: logger) + middleware.instance_variable_set(:@trace, []) + request = double(url: 'http://test/index') + response = double(headers: nil) + strategy = middleware.instance_variable_get(:@strategy) + + expect(strategy).to receive(:delete).with('http://test/index') + expect { middleware.send(:delete, request, response) }.not_to raise_error + end end describe 'when acting as a shared cache' do