identity_cache 0.2.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 46228f11af3be0212c16960de9cb1d321ceac8db
4
- data.tar.gz: bf0fca38334faff8e71ea229bf472570efc969ff
3
+ metadata.gz: 3d42fb65626667919f039bd01f22d0955abb9b4d
4
+ data.tar.gz: 9605d139be87f7cd1b1eedae86ccf348de18267b
5
5
  SHA512:
6
- metadata.gz: bcaccc11973f744fb68e25572a0cb90fafd6ad559b2c54764c61c6fa9d894305b5c59a0ca32c6f01e24bf3e539b5834288641f830e3034b3871cd8aa3204dd6b
7
- data.tar.gz: dfe2fafe9f1c65a78a972cc0369078a17442e168436896f5600b6d964c2cca6ff3fdd10a0998d63e2f65c7fbe77c22ea5a007b42c40c9ade132d443cd59d3a46
6
+ metadata.gz: 6d613cf3510702a00e84f17671c432e7fe48409c425dcd31282d944c6dd9d47cafd14eb064210d0c64a8ec9cbdf2ba236bcd72991a3573a3772d521f8bb4ce0c
7
+ data.tar.gz: 8057e8f156bde9b022cae3a6fc62d1a3d570453ba3efc1d362b88fcd5137552ab6478dc242079c5791d53f6ca0809a44eb53392fbcd90d3217136c756e873f9b
checksums.yaml.gz.sig CHANGED
Binary file
data.tar.gz.sig CHANGED
@@ -1 +1 @@
1
- W�~k�#��V�����ѻ?en `��gt\˦������̃b�!�;��m�+���:F���".Av��ex�R��S�$�=�����u�!�-�)Ie�^������[h0˨}.Q���>���]#
1
+ ��sRozMd^���s����q��Dm�<������{JZ��\q��1�.>�S�)BɢDU!�}���V��Pr�����?���v�L�S����y<ZCܕg ���}�M�����Tk5���1�{wW x��U� ���U׎��'fԷ�+�̛�T����ak��$Wb��q�d����m���܈mnʙ��������,���u��3�՞��X�N{�oZ���Q�2�y��7������6��{t�4�@1:
@@ -19,7 +19,7 @@ Gem::Specification.new do |gem|
19
19
  gem.add_dependency('activerecord', '>= 3.2')
20
20
  gem.add_dependency('memcached', '~> 1.8.0')
21
21
 
22
- gem.add_development_dependency('memcached_store', '~> 0.12.5')
22
+ gem.add_development_dependency('memcached_store', '~> 0.12.6')
23
23
  gem.add_development_dependency('rake')
24
24
  gem.add_development_dependency('mocha', '0.14.0')
25
25
  gem.add_development_dependency('spy')
@@ -12,6 +12,7 @@ require 'identity_cache/query_api'
12
12
  require "identity_cache/cache_hash"
13
13
  require "identity_cache/cache_invalidation"
14
14
  require "identity_cache/cache_fetcher"
15
+ require "identity_cache/fallback_fetcher"
15
16
 
16
17
  module IdentityCache
17
18
  CACHED_NIL = :idc_cached_nil
@@ -2,8 +2,8 @@ module IdentityCache
2
2
  class CacheFetcher
3
3
  attr_accessor :cache_backend
4
4
 
5
- def initialize(cache_backend = nil)
6
- @cache_backend = cache_backend || Rails.cache
5
+ def initialize(cache_backend)
6
+ @cache_backend = cache_backend
7
7
  end
8
8
 
9
9
  def write(key, value)
@@ -0,0 +1,43 @@
1
+ module IdentityCache
2
+ class FallbackFetcher
3
+ attr_accessor :cache_backend
4
+
5
+ def initialize(cache_backend)
6
+ @cache_backend = cache_backend
7
+ end
8
+
9
+ def write(key, value)
10
+ @cache_backend.write(key, value)
11
+ end
12
+
13
+ def delete(key)
14
+ @cache_backend.delete(key)
15
+ end
16
+
17
+ def clear
18
+ @cache_backend.clear
19
+ end
20
+
21
+ def fetch_multi(keys, &block)
22
+ results = @cache_backend.read_multi(*keys)
23
+ missed_keys = keys - results.keys
24
+ unless missed_keys.empty?
25
+ replacement_results = yield missed_keys
26
+ missed_keys.zip(replacement_results) do |key, replacement_result|
27
+ @cache_backend.write(key, replacement_result)
28
+ results[key] = replacement_result
29
+ end
30
+ end
31
+ results
32
+ end
33
+
34
+ def fetch(key)
35
+ result = @cache_backend.read(key)
36
+ if result.nil?
37
+ result = yield
38
+ @cache_backend.write(key, result)
39
+ end
40
+ result
41
+ end
42
+ end
43
+ end
@@ -5,12 +5,16 @@ module IdentityCache
5
5
  attr_reader :cache_fetcher
6
6
 
7
7
  def initialize(cache_adaptor = nil)
8
- @cache_fetcher = CacheFetcher.new(cache_adaptor)
8
+ self.cache_backend = cache_adaptor || Rails.cache
9
9
  @key_value_maps = Hash.new {|h, k| h[k] = {} }
10
10
  end
11
11
 
12
12
  def cache_backend=(cache_adaptor)
13
- @cache_fetcher.cache_backend = cache_adaptor
13
+ if cache_adaptor.respond_to?(:cas) && cache_adaptor.respond_to?(:cas_multi)
14
+ @cache_fetcher = CacheFetcher.new(cache_adaptor)
15
+ else
16
+ @cache_fetcher = FallbackFetcher.new(cache_adaptor)
17
+ end
14
18
  end
15
19
 
16
20
  def memoized_key_values
@@ -1,4 +1,4 @@
1
1
  module IdentityCache
2
- VERSION = "0.2.0"
3
- CACHE_VERSION = 4
2
+ VERSION = "0.2.1"
3
+ CACHE_VERSION = 5
4
4
  end
Binary file
@@ -4,7 +4,16 @@ class MemoizedCacheProxyTest < IdentityCache::TestCase
4
4
  def test_changing_default_cache
5
5
  IdentityCache.cache_backend = ActiveSupport::Cache::MemoryStore.new
6
6
  IdentityCache.cache.write('foo', 'bar')
7
- assert_raises(NoMethodError) { IdentityCache.cache.fetch('foo') }
7
+ assert_equal 'bar', IdentityCache.cache.fetch('foo')
8
+ end
9
+
10
+ def test_fetch_multi_with_fallback_fetcher
11
+ IdentityCache.cache_backend = backend = ActiveSupport::Cache::MemoryStore.new
12
+ IdentityCache.cache.write('foo', 'bar')
13
+ backend.expects(:write).with('bar', 'baz')
14
+ yielded = nil
15
+ assert_equal({'foo' => 'bar', 'bar' => 'baz'}, IdentityCache.cache.fetch_multi('foo', 'bar') {|_| yielded = ['baz'] })
16
+ assert_equal ['baz'], yielded
8
17
  end
9
18
 
10
19
  def test_fetch_should_short_circuit_on_memoized_values
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: identity_cache
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Camilo Lopez
@@ -36,7 +36,7 @@ cert_chain:
36
36
  fl3hbtVFTqbOlwL9vy1fudXcolIE/ZTcxQ+er07ZFZdKCXayR9PPs64heamfn0fp
37
37
  TConQSX2BnZdhIEYW+cKzEC/bLc=
38
38
  -----END CERTIFICATE-----
39
- date: 2014-06-05 00:00:00.000000000 Z
39
+ date: 2014-06-14 00:00:00.000000000 Z
40
40
  dependencies:
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: ar_transaction_changes
@@ -86,14 +86,14 @@ dependencies:
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: 0.12.5
89
+ version: 0.12.6
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: 0.12.5
96
+ version: 0.12.6
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: rake
99
99
  requirement: !ruby/object:Gem::Requirement
@@ -217,6 +217,7 @@ files:
217
217
  - lib/identity_cache/cache_invalidation.rb
218
218
  - lib/identity_cache/cache_key_generation.rb
219
219
  - lib/identity_cache/configuration_dsl.rb
220
+ - lib/identity_cache/fallback_fetcher.rb
220
221
  - lib/identity_cache/memoized_cache_proxy.rb
221
222
  - lib/identity_cache/parent_model_expiration.rb
222
223
  - lib/identity_cache/query_api.rb
@@ -270,7 +271,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
270
271
  version: '0'
271
272
  requirements: []
272
273
  rubyforge_project:
273
- rubygems_version: 2.2.0
274
+ rubygems_version: 2.2.2
274
275
  signing_key:
275
276
  specification_version: 4
276
277
  summary: IdentityCache lets you specify how you want to cache your model objects,
metadata.gz.sig CHANGED
Binary file