identity_cache 0.2.0 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|