faraday-http-cache 0.4.0 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f18d30f7f544974ede44d28d9bba250e746a9b2e
4
- data.tar.gz: 29cfe8e36786c6a0a47d3d9f1b3cbdb2388f1a19
3
+ metadata.gz: 944d63dfce54bd8e47a79dbc623ea1ad9e8fe043
4
+ data.tar.gz: a56ffdfa6ce7e24529dae5c80ebd7661000a05b8
5
5
  SHA512:
6
- metadata.gz: 14809735e62b3f547d9a8a9b8e35ce1be0f44a962650a2c196d4dece1c372829184766cc979ec1bf8cad3cfd4011dd086aebefd74e1f11847b684e277853bf8e
7
- data.tar.gz: a1cdb3e8286c86b03f61dfb6516affbe2b743707b4b7c7d68a8c45e34df55bfd9dcd9e3c7e8290d8f965f3ee36af762a8be2fd751730a6842244a00534c05eac
6
+ metadata.gz: 0da2c34ab6926b90d05c4b41977568bf6dd465a06b6c3733fe4270346c1f3f72b4a84934a02194ecbe6f1d33ac24e327a731770665415547805208ddb53acd6f
7
+ data.tar.gz: 789ffc45c250c7b9c2e89c6bf205cb22404551748771229ef4a1906e44ca20611df99cfdcda0fb6fd8a30b575eb1d2bf0d2f37fdf46cb5cbe5a34bf09d12a3d9
@@ -1,6 +1,6 @@
1
1
  module Faraday
2
2
  class HttpCache < Faraday::Middleware
3
- # Internal: a class to represent the 'Cache-Control' header options.
3
+ # Internal: A class to represent the 'Cache-Control' header options.
4
4
  # This implementation is based on 'rack-cache' internals by Ryan Tomayko.
5
5
  # It breaks the several directives into keys/values and stores them into
6
6
  # a Hash.
@@ -3,7 +3,7 @@ require 'faraday/http_cache/cache_control'
3
3
 
4
4
  module Faraday
5
5
  class HttpCache < Faraday::Middleware
6
- # Internal: a class to represent a response from a Faraday request.
6
+ # Internal: A class to represent a response from a Faraday request.
7
7
  # It decorates the response hash into a smarter object that queries
8
8
  # the response headers and status informations about how the caching
9
9
  # middleware should handle this specific response.
@@ -3,7 +3,7 @@ require 'digest/sha1'
3
3
 
4
4
  module Faraday
5
5
  class HttpCache < Faraday::Middleware
6
- # Internal: A Wrapper around an ActiveSupport::CacheStore to store responses.
6
+ # Internal: A wrapper around an ActiveSupport::CacheStore to store responses.
7
7
  #
8
8
  # Examples
9
9
  # # Creates a new Storage using a MemCached backend from ActiveSupport.
@@ -33,7 +33,6 @@ module Faraday
33
33
  @cache = lookup_store(@cache, options[:store_options])
34
34
  end
35
35
  assert_valid_store!
36
- notify_memory_store_usage
37
36
  end
38
37
 
39
38
  # Internal: Writes a response with a key based on the given request.
@@ -47,6 +46,11 @@ module Faraday
47
46
  key = cache_key_for(request)
48
47
  value = @serializer.dump(response.serializable_hash)
49
48
  @cache.write(key, value)
49
+ rescue Encoding::UndefinedConversionError => e
50
+ if @logger
51
+ @logger.warn("Response could not be serialized: #{e.message}. Try using Marshal to serialize.")
52
+ end
53
+ raise
50
54
  end
51
55
 
52
56
  # Internal: Reads a key based on the given request from the underlying cache.
@@ -85,19 +89,6 @@ module Faraday
85
89
  Digest::SHA1.hexdigest(@serializer.dump(cache_keys.sort))
86
90
  end
87
91
 
88
- # Internal: Logs a warning when the 'cache' implementation
89
- # isn't suitable for production use.
90
- #
91
- # Returns nothing.
92
- def notify_memory_store_usage
93
- return if @logger.nil?
94
-
95
- kind = @cache.class.name.split('::').last.sub('Store', '').downcase
96
- if kind == 'memory'
97
- @logger.warn 'HTTP Cache: using a MemoryStore is not advised as the cache might not be persisted across multiple processes or connection instances.'
98
- end
99
- end
100
-
101
92
  # Internal: Creates a cache store from 'ActiveSupport' with a set of options.
102
93
  #
103
94
  # store - A 'Symbol' with the store name.
data/spec/json_spec.rb CHANGED
@@ -12,9 +12,6 @@ describe Faraday::HttpCache do
12
12
  end
13
13
 
14
14
  it 'works fine with other middlewares' do
15
- if Faraday::VERSION == '0.9.0'
16
- pending 'faraday_middleware is not compatible with faraday 0.9'
17
- end
18
15
  client.get('clear')
19
16
  expect(client.get('json').body['count']).to eq(1)
20
17
  expect(client.get('json').body['count']).to eq(1)
data/spec/spec_helper.rb CHANGED
@@ -3,6 +3,9 @@ require 'socket'
3
3
 
4
4
  require 'faraday-http-cache'
5
5
  require 'faraday_middleware'
6
+
7
+ # https://github.com/rails/rails/pull/14667
8
+ require 'active_support/per_thread_registry'
6
9
  require 'active_support/cache'
7
10
 
8
11
  require 'support/test_app'
data/spec/storage_spec.rb CHANGED
@@ -18,12 +18,6 @@ describe Faraday::HttpCache::Storage do
18
18
  Faraday::HttpCache::Storage.new
19
19
  end
20
20
 
21
- it 'emits a warning when using a MemoryStore' do
22
- logger = double
23
- expect(logger).to receive(:warn).with(/using a MemoryStore is not advised/)
24
- Faraday::HttpCache::Storage.new(logger: logger)
25
- end
26
-
27
21
  it 'lookups an ActiveSupport cache store if a Symbol is given' do
28
22
  expect(ActiveSupport::Cache).to receive(:lookup_store).with(:file_store, ['/tmp']).and_call_original
29
23
  Faraday::HttpCache::Storage.new(store: :file_store, store_options: ['/tmp'])
@@ -57,6 +51,23 @@ describe Faraday::HttpCache::Storage do
57
51
  let(:serialized) { JSON.dump(response.serializable_hash) }
58
52
  let(:cache_key) { '503ac9f7180ca1cdec49e8eb73a9cc0b47c27325' }
59
53
  it_behaves_like 'serialization'
54
+
55
+ context 'with ASCII character in response that cannot be converted to UTF-8' do
56
+ let(:response) do
57
+ body = "\u2665".force_encoding('ASCII-8BIT')
58
+ double(:response, serializable_hash: { 'body' => body })
59
+ end
60
+
61
+ it 'raises and logs a warning' do
62
+ logger = double(:logger, warn: nil)
63
+ storage = Faraday::HttpCache::Storage.new(logger: logger)
64
+
65
+ expect { storage.write(request, response) }.to raise_error
66
+ expect(logger).to have_received(:warn).with(
67
+ 'Response could not be serialized: "\xE2" from ASCII-8BIT to UTF-8. Try using Marshal to serialize.'
68
+ )
69
+ end
70
+ end
60
71
  end
61
72
 
62
73
  context 'with Marshal serializer' do
@@ -68,7 +79,6 @@ describe Faraday::HttpCache::Storage do
68
79
  end
69
80
  it_behaves_like 'serialization'
70
81
  end
71
-
72
82
  end
73
83
 
74
84
  describe 'reading responses' do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: faraday-http-cache
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lucas Mazza
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-01-30 00:00:00.000000000 Z
11
+ date: 2014-06-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -68,7 +68,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
68
68
  version: '0'
69
69
  requirements: []
70
70
  rubyforge_project:
71
- rubygems_version: 2.2.0
71
+ rubygems_version: 2.2.2
72
72
  signing_key:
73
73
  specification_version: 4
74
74
  summary: A Faraday middleware that stores and validates cache expiration.