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 +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +1 -1
- data/identity_cache.gemspec +1 -1
- data/lib/identity_cache.rb +1 -0
- data/lib/identity_cache/cache_fetcher.rb +2 -2
- data/lib/identity_cache/fallback_fetcher.rb +43 -0
- data/lib/identity_cache/memoized_cache_proxy.rb +6 -2
- data/lib/identity_cache/version.rb +2 -2
- data/test/fixtures/serialized_record +0 -0
- data/test/memoized_cache_proxy_test.rb +10 -1
- metadata +6 -5
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3d42fb65626667919f039bd01f22d0955abb9b4d
|
4
|
+
data.tar.gz: 9605d139be87f7cd1b1eedae86ccf348de18267b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6d613cf3510702a00e84f17671c432e7fe48409c425dcd31282d944c6dd9d47cafd14eb064210d0c64a8ec9cbdf2ba236bcd72991a3573a3772d521f8bb4ce0c
|
7
|
+
data.tar.gz: 8057e8f156bde9b022cae3a6fc62d1a3d570453ba3efc1d362b88fcd5137552ab6478dc242079c5791d53f6ca0809a44eb53392fbcd90d3217136c756e873f9b
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
@@ -1 +1 @@
|
|
1
|
-
�
|
1
|
+
��sRozMd^���s����q��Dm�<������{JZ��\q��1�.>�S�)BɢD�U!�}���V��Pr�����?���v�L�S����y<ZCܕg���}�M�����Tk�5���1�{wW x��U� ���U��'fԷ�+�̛�T����ak��$Wb��q�d����m���܈m�nʙ��������,���u��3�՞��X�N{�oZ���Q�2�y��7������6��{t�4�@1:
|
data/identity_cache.gemspec
CHANGED
@@ -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.
|
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')
|
data/lib/identity_cache.rb
CHANGED
@@ -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
|
@@ -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
|
-
|
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
|
-
|
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
|
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
|
-
|
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.
|
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-
|
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.
|
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.
|
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.
|
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
|