identity_cache 0.4.1 → 1.1.0
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 +5 -5
- data/.github/probots.yml +2 -0
- data/.github/workflows/ci.yml +92 -0
- data/.gitignore +2 -0
- data/.rubocop.yml +5 -0
- data/CAVEATS.md +25 -0
- data/CHANGELOG.md +73 -19
- data/Gemfile +5 -1
- data/LICENSE +1 -1
- data/README.md +49 -27
- data/Rakefile +14 -5
- data/dev.yml +12 -16
- data/gemfiles/Gemfile.latest-release +8 -0
- data/gemfiles/Gemfile.min-supported +7 -0
- data/gemfiles/Gemfile.rails-edge +7 -0
- data/identity_cache.gemspec +29 -10
- data/lib/identity_cache.rb +78 -51
- data/lib/identity_cache/belongs_to_caching.rb +12 -40
- data/lib/identity_cache/cache_fetcher.rb +6 -5
- data/lib/identity_cache/cache_hash.rb +2 -2
- data/lib/identity_cache/cache_invalidation.rb +4 -11
- data/lib/identity_cache/cache_key_generation.rb +17 -65
- data/lib/identity_cache/cache_key_loader.rb +128 -0
- data/lib/identity_cache/cached.rb +7 -0
- data/lib/identity_cache/cached/association.rb +87 -0
- data/lib/identity_cache/cached/attribute.rb +123 -0
- data/lib/identity_cache/cached/attribute_by_multi.rb +37 -0
- data/lib/identity_cache/cached/attribute_by_one.rb +88 -0
- data/lib/identity_cache/cached/belongs_to.rb +100 -0
- data/lib/identity_cache/cached/embedded_fetching.rb +41 -0
- data/lib/identity_cache/cached/prefetcher.rb +61 -0
- data/lib/identity_cache/cached/primary_index.rb +96 -0
- data/lib/identity_cache/cached/recursive/association.rb +109 -0
- data/lib/identity_cache/cached/recursive/has_many.rb +9 -0
- data/lib/identity_cache/cached/recursive/has_one.rb +9 -0
- data/lib/identity_cache/cached/reference/association.rb +16 -0
- data/lib/identity_cache/cached/reference/has_many.rb +105 -0
- data/lib/identity_cache/cached/reference/has_one.rb +100 -0
- data/lib/identity_cache/configuration_dsl.rb +53 -215
- data/lib/identity_cache/encoder.rb +95 -0
- data/lib/identity_cache/expiry_hook.rb +36 -0
- data/lib/identity_cache/fallback_fetcher.rb +2 -1
- data/lib/identity_cache/load_strategy/eager.rb +28 -0
- data/lib/identity_cache/load_strategy/lazy.rb +71 -0
- data/lib/identity_cache/load_strategy/load_request.rb +20 -0
- data/lib/identity_cache/load_strategy/multi_load_request.rb +27 -0
- data/lib/identity_cache/mem_cache_store_cas.rb +53 -0
- data/lib/identity_cache/memoized_cache_proxy.rb +137 -58
- data/lib/identity_cache/parent_model_expiration.rb +46 -11
- data/lib/identity_cache/query_api.rb +102 -408
- data/lib/identity_cache/railtie.rb +8 -0
- data/lib/identity_cache/record_not_found.rb +6 -0
- data/lib/identity_cache/should_use_cache.rb +1 -0
- data/lib/identity_cache/version.rb +3 -2
- data/lib/identity_cache/with_primary_index.rb +136 -0
- data/lib/identity_cache/without_primary_index.rb +24 -3
- data/performance/cache_runner.rb +25 -73
- data/performance/cpu.rb +4 -3
- data/performance/externals.rb +4 -3
- data/performance/profile.rb +6 -5
- data/railgun.yml +16 -0
- metadata +60 -73
- data/.travis.yml +0 -30
- data/Gemfile.rails42 +0 -6
- data/Gemfile.rails50 +0 -6
- data/test/attribute_cache_test.rb +0 -110
- data/test/cache_fetch_includes_test.rb +0 -46
- data/test/cache_hash_test.rb +0 -14
- data/test/cache_invalidation_test.rb +0 -139
- data/test/deeply_nested_associated_record_test.rb +0 -19
- data/test/denormalized_has_many_test.rb +0 -211
- data/test/denormalized_has_one_test.rb +0 -160
- data/test/fetch_multi_test.rb +0 -308
- data/test/fetch_test.rb +0 -258
- data/test/fixtures/serialized_record.mysql2 +0 -0
- data/test/fixtures/serialized_record.postgresql +0 -0
- data/test/helpers/active_record_objects.rb +0 -106
- data/test/helpers/database_connection.rb +0 -72
- data/test/helpers/serialization_format.rb +0 -42
- data/test/helpers/update_serialization_format.rb +0 -24
- data/test/identity_cache_test.rb +0 -29
- data/test/index_cache_test.rb +0 -161
- data/test/memoized_attributes_test.rb +0 -49
- data/test/memoized_cache_proxy_test.rb +0 -107
- data/test/normalized_belongs_to_test.rb +0 -107
- data/test/normalized_has_many_test.rb +0 -231
- data/test/normalized_has_one_test.rb +0 -9
- data/test/prefetch_associations_test.rb +0 -364
- data/test/readonly_test.rb +0 -109
- data/test/recursive_denormalized_has_many_test.rb +0 -131
- data/test/save_test.rb +0 -82
- data/test/schema_change_test.rb +0 -112
- data/test/serialization_format_change_test.rb +0 -16
- data/test/test_helper.rb +0 -140
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:
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Camilo Lopez
|
@@ -14,7 +14,7 @@ authors:
|
|
14
14
|
autorequire:
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
|
-
date:
|
17
|
+
date: 2021-01-08 00:00:00.000000000 Z
|
18
18
|
dependencies:
|
19
19
|
- !ruby/object:Gem::Dependency
|
20
20
|
name: ar_transaction_changes
|
@@ -22,28 +22,28 @@ dependencies:
|
|
22
22
|
requirements:
|
23
23
|
- - "~>"
|
24
24
|
- !ruby/object:Gem::Version
|
25
|
-
version: '1.
|
25
|
+
version: '1.1'
|
26
26
|
type: :runtime
|
27
27
|
prerelease: false
|
28
28
|
version_requirements: !ruby/object:Gem::Requirement
|
29
29
|
requirements:
|
30
30
|
- - "~>"
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version: '1.
|
32
|
+
version: '1.1'
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
34
|
name: activerecord
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
36
36
|
requirements:
|
37
37
|
- - ">="
|
38
38
|
- !ruby/object:Gem::Version
|
39
|
-
version:
|
39
|
+
version: '5.2'
|
40
40
|
type: :runtime
|
41
41
|
prerelease: false
|
42
42
|
version_requirements: !ruby/object:Gem::Requirement
|
43
43
|
requirements:
|
44
44
|
- - ">="
|
45
45
|
- !ruby/object:Gem::Version
|
46
|
-
version:
|
46
|
+
version: '5.2'
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: memcached
|
49
49
|
requirement: !ruby/object:Gem::Requirement
|
@@ -72,6 +72,20 @@ dependencies:
|
|
72
72
|
- - "~>"
|
73
73
|
- !ruby/object:Gem::Version
|
74
74
|
version: 1.0.0
|
75
|
+
- !ruby/object:Gem::Dependency
|
76
|
+
name: dalli
|
77
|
+
requirement: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - ">="
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '0'
|
82
|
+
type: :development
|
83
|
+
prerelease: false
|
84
|
+
version_requirements: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - ">="
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '0'
|
75
89
|
- !ruby/object:Gem::Dependency
|
76
90
|
name: rake
|
77
91
|
requirement: !ruby/object:Gem::Requirement
|
@@ -184,24 +198,28 @@ dependencies:
|
|
184
198
|
- - ">="
|
185
199
|
- !ruby/object:Gem::Version
|
186
200
|
version: '0'
|
187
|
-
description: Opt
|
201
|
+
description: Opt-in read through Active Record caching.
|
188
202
|
email:
|
189
203
|
- gems@shopify.com
|
190
204
|
executables: []
|
191
205
|
extensions: []
|
192
206
|
extra_rdoc_files: []
|
193
207
|
files:
|
208
|
+
- ".github/probots.yml"
|
209
|
+
- ".github/workflows/ci.yml"
|
194
210
|
- ".gitignore"
|
195
|
-
- ".
|
211
|
+
- ".rubocop.yml"
|
212
|
+
- CAVEATS.md
|
196
213
|
- CHANGELOG.md
|
197
214
|
- CONTRIBUTING.md
|
198
215
|
- Gemfile
|
199
|
-
- Gemfile.rails42
|
200
|
-
- Gemfile.rails50
|
201
216
|
- LICENSE
|
202
217
|
- README.md
|
203
218
|
- Rakefile
|
204
219
|
- dev.yml
|
220
|
+
- gemfiles/Gemfile.latest-release
|
221
|
+
- gemfiles/Gemfile.min-supported
|
222
|
+
- gemfiles/Gemfile.rails-edge
|
205
223
|
- identity_cache.gemspec
|
206
224
|
- lib/identity_cache.rb
|
207
225
|
- lib/identity_cache/belongs_to_caching.rb
|
@@ -209,51 +227,50 @@ files:
|
|
209
227
|
- lib/identity_cache/cache_hash.rb
|
210
228
|
- lib/identity_cache/cache_invalidation.rb
|
211
229
|
- lib/identity_cache/cache_key_generation.rb
|
230
|
+
- lib/identity_cache/cache_key_loader.rb
|
231
|
+
- lib/identity_cache/cached.rb
|
232
|
+
- lib/identity_cache/cached/association.rb
|
233
|
+
- lib/identity_cache/cached/attribute.rb
|
234
|
+
- lib/identity_cache/cached/attribute_by_multi.rb
|
235
|
+
- lib/identity_cache/cached/attribute_by_one.rb
|
236
|
+
- lib/identity_cache/cached/belongs_to.rb
|
237
|
+
- lib/identity_cache/cached/embedded_fetching.rb
|
238
|
+
- lib/identity_cache/cached/prefetcher.rb
|
239
|
+
- lib/identity_cache/cached/primary_index.rb
|
240
|
+
- lib/identity_cache/cached/recursive/association.rb
|
241
|
+
- lib/identity_cache/cached/recursive/has_many.rb
|
242
|
+
- lib/identity_cache/cached/recursive/has_one.rb
|
243
|
+
- lib/identity_cache/cached/reference/association.rb
|
244
|
+
- lib/identity_cache/cached/reference/has_many.rb
|
245
|
+
- lib/identity_cache/cached/reference/has_one.rb
|
212
246
|
- lib/identity_cache/configuration_dsl.rb
|
247
|
+
- lib/identity_cache/encoder.rb
|
248
|
+
- lib/identity_cache/expiry_hook.rb
|
213
249
|
- lib/identity_cache/fallback_fetcher.rb
|
250
|
+
- lib/identity_cache/load_strategy/eager.rb
|
251
|
+
- lib/identity_cache/load_strategy/lazy.rb
|
252
|
+
- lib/identity_cache/load_strategy/load_request.rb
|
253
|
+
- lib/identity_cache/load_strategy/multi_load_request.rb
|
254
|
+
- lib/identity_cache/mem_cache_store_cas.rb
|
214
255
|
- lib/identity_cache/memoized_cache_proxy.rb
|
215
256
|
- lib/identity_cache/parent_model_expiration.rb
|
216
257
|
- lib/identity_cache/query_api.rb
|
258
|
+
- lib/identity_cache/railtie.rb
|
259
|
+
- lib/identity_cache/record_not_found.rb
|
217
260
|
- lib/identity_cache/should_use_cache.rb
|
218
261
|
- lib/identity_cache/version.rb
|
262
|
+
- lib/identity_cache/with_primary_index.rb
|
219
263
|
- lib/identity_cache/without_primary_index.rb
|
220
264
|
- performance/cache_runner.rb
|
221
265
|
- performance/cpu.rb
|
222
266
|
- performance/externals.rb
|
223
267
|
- performance/profile.rb
|
268
|
+
- railgun.yml
|
224
269
|
- shipit.rubygems.yml
|
225
|
-
- test/attribute_cache_test.rb
|
226
|
-
- test/cache_fetch_includes_test.rb
|
227
|
-
- test/cache_hash_test.rb
|
228
|
-
- test/cache_invalidation_test.rb
|
229
|
-
- test/deeply_nested_associated_record_test.rb
|
230
|
-
- test/denormalized_has_many_test.rb
|
231
|
-
- test/denormalized_has_one_test.rb
|
232
|
-
- test/fetch_multi_test.rb
|
233
|
-
- test/fetch_test.rb
|
234
|
-
- test/fixtures/serialized_record.mysql2
|
235
|
-
- test/fixtures/serialized_record.postgresql
|
236
|
-
- test/helpers/active_record_objects.rb
|
237
|
-
- test/helpers/database_connection.rb
|
238
|
-
- test/helpers/serialization_format.rb
|
239
|
-
- test/helpers/update_serialization_format.rb
|
240
|
-
- test/identity_cache_test.rb
|
241
|
-
- test/index_cache_test.rb
|
242
|
-
- test/memoized_attributes_test.rb
|
243
|
-
- test/memoized_cache_proxy_test.rb
|
244
|
-
- test/normalized_belongs_to_test.rb
|
245
|
-
- test/normalized_has_many_test.rb
|
246
|
-
- test/normalized_has_one_test.rb
|
247
|
-
- test/prefetch_associations_test.rb
|
248
|
-
- test/readonly_test.rb
|
249
|
-
- test/recursive_denormalized_has_many_test.rb
|
250
|
-
- test/save_test.rb
|
251
|
-
- test/schema_change_test.rb
|
252
|
-
- test/serialization_format_change_test.rb
|
253
|
-
- test/test_helper.rb
|
254
270
|
homepage: https://github.com/Shopify/identity_cache
|
255
271
|
licenses: []
|
256
|
-
metadata:
|
272
|
+
metadata:
|
273
|
+
allowed_push_host: https://rubygems.org
|
257
274
|
post_install_message:
|
258
275
|
rdoc_options: []
|
259
276
|
require_paths:
|
@@ -262,48 +279,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
262
279
|
requirements:
|
263
280
|
- - ">="
|
264
281
|
- !ruby/object:Gem::Version
|
265
|
-
version: 2.
|
282
|
+
version: 2.5.0
|
266
283
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
267
284
|
requirements:
|
268
285
|
- - ">="
|
269
286
|
- !ruby/object:Gem::Version
|
270
287
|
version: '0'
|
271
288
|
requirements: []
|
272
|
-
|
273
|
-
rubygems_version: 2.5.1
|
289
|
+
rubygems_version: 3.0.3
|
274
290
|
signing_key:
|
275
291
|
specification_version: 4
|
276
292
|
summary: IdentityCache lets you specify how you want to cache your model objects,
|
277
293
|
at the model level, and adds a number of convenience methods for accessing those
|
278
294
|
objects through the cache. Memcached is used as the backend cache store, and the
|
279
295
|
database is only hit when a copy of the object cannot be found in Memcached.
|
280
|
-
test_files:
|
281
|
-
- test/attribute_cache_test.rb
|
282
|
-
- test/cache_fetch_includes_test.rb
|
283
|
-
- test/cache_hash_test.rb
|
284
|
-
- test/cache_invalidation_test.rb
|
285
|
-
- test/deeply_nested_associated_record_test.rb
|
286
|
-
- test/denormalized_has_many_test.rb
|
287
|
-
- test/denormalized_has_one_test.rb
|
288
|
-
- test/fetch_multi_test.rb
|
289
|
-
- test/fetch_test.rb
|
290
|
-
- test/fixtures/serialized_record.mysql2
|
291
|
-
- test/fixtures/serialized_record.postgresql
|
292
|
-
- test/helpers/active_record_objects.rb
|
293
|
-
- test/helpers/database_connection.rb
|
294
|
-
- test/helpers/serialization_format.rb
|
295
|
-
- test/helpers/update_serialization_format.rb
|
296
|
-
- test/identity_cache_test.rb
|
297
|
-
- test/index_cache_test.rb
|
298
|
-
- test/memoized_attributes_test.rb
|
299
|
-
- test/memoized_cache_proxy_test.rb
|
300
|
-
- test/normalized_belongs_to_test.rb
|
301
|
-
- test/normalized_has_many_test.rb
|
302
|
-
- test/normalized_has_one_test.rb
|
303
|
-
- test/prefetch_associations_test.rb
|
304
|
-
- test/readonly_test.rb
|
305
|
-
- test/recursive_denormalized_has_many_test.rb
|
306
|
-
- test/save_test.rb
|
307
|
-
- test/schema_change_test.rb
|
308
|
-
- test/serialization_format_change_test.rb
|
309
|
-
- test/test_helper.rb
|
296
|
+
test_files: []
|
data/.travis.yml
DELETED
@@ -1,30 +0,0 @@
|
|
1
|
-
language: ruby
|
2
|
-
|
3
|
-
rvm:
|
4
|
-
- '2.2.6'
|
5
|
-
- '2.3.3'
|
6
|
-
|
7
|
-
gemfile:
|
8
|
-
- Gemfile.rails42
|
9
|
-
- Gemfile.rails50
|
10
|
-
|
11
|
-
matrix:
|
12
|
-
exclude:
|
13
|
-
- gemfile: Gemfile.rails50
|
14
|
-
env: DB=postgresql
|
15
|
-
|
16
|
-
env:
|
17
|
-
- DB=mysql2
|
18
|
-
- DB=postgresql
|
19
|
-
|
20
|
-
services:
|
21
|
-
- memcache
|
22
|
-
- mysql
|
23
|
-
|
24
|
-
sudo: false
|
25
|
-
|
26
|
-
before_script:
|
27
|
-
- mysql -e 'create database identity_cache_test'
|
28
|
-
- psql -c 'create database identity_cache_test;' -U postgres
|
29
|
-
|
30
|
-
cache: bundler
|
data/Gemfile.rails42
DELETED
data/Gemfile.rails50
DELETED
@@ -1,110 +0,0 @@
|
|
1
|
-
require "test_helper"
|
2
|
-
|
3
|
-
class AttributeCacheTest < IdentityCache::TestCase
|
4
|
-
NAMESPACE = IdentityCache::CacheKeyGeneration::DEFAULT_NAMESPACE
|
5
|
-
|
6
|
-
def setup
|
7
|
-
super
|
8
|
-
AssociatedRecord.cache_attribute :name
|
9
|
-
|
10
|
-
@parent = Item.create!(:title => 'bob')
|
11
|
-
@record = @parent.associated_records.create!(:name => 'foo')
|
12
|
-
@name_attribute_key = "#{NAMESPACE}attr:AssociatedRecord:name:id:#{cache_hash(@record.id.to_s)}"
|
13
|
-
IdentityCache.cache.clear
|
14
|
-
end
|
15
|
-
|
16
|
-
def test_attribute_values_are_fetched_and_returned_on_cache_misses
|
17
|
-
fetch = Spy.on(IdentityCache.cache, :fetch).and_call_through
|
18
|
-
|
19
|
-
assert_queries(1) do
|
20
|
-
assert_equal 'foo', AssociatedRecord.fetch_name_by_id(1)
|
21
|
-
end
|
22
|
-
assert fetch.has_been_called_with?(@name_attribute_key)
|
23
|
-
end
|
24
|
-
|
25
|
-
def test_attribute_values_are_returned_on_cache_hits
|
26
|
-
assert_equal 'foo', AssociatedRecord.fetch_name_by_id(1)
|
27
|
-
|
28
|
-
assert_queries(0) do
|
29
|
-
assert_equal 'foo', AssociatedRecord.fetch_name_by_id(1)
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
def test_nil_is_stored_in_the_cache_on_cache_misses
|
34
|
-
assert_nil AssociatedRecord.fetch_name_by_id(2)
|
35
|
-
|
36
|
-
assert_queries(0) do
|
37
|
-
assert_nil AssociatedRecord.fetch_name_by_id(2)
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
def test_cached_attribute_values_are_expired_from_the_cache_when_an_existing_record_is_saved
|
42
|
-
assert_queries(1) { assert_equal 'foo', AssociatedRecord.fetch_name_by_id(1) }
|
43
|
-
assert_queries(0) { assert_equal 'foo', AssociatedRecord.fetch_name_by_id(1) }
|
44
|
-
|
45
|
-
@record.save!
|
46
|
-
|
47
|
-
assert_queries(1) { assert_equal 'foo', AssociatedRecord.fetch_name_by_id(1) }
|
48
|
-
end
|
49
|
-
|
50
|
-
def test_cached_attribute_values_are_expired_from_the_cache_when_an_existing_record_with_changed_attributes_is_saved
|
51
|
-
assert_queries(1) { assert_equal 'foo', AssociatedRecord.fetch_name_by_id(1) }
|
52
|
-
assert_queries(0) { assert_equal 'foo', AssociatedRecord.fetch_name_by_id(1) }
|
53
|
-
|
54
|
-
@record.name = 'bar'
|
55
|
-
@record.save!
|
56
|
-
|
57
|
-
assert_queries(1) { assert_equal 'bar', AssociatedRecord.fetch_name_by_id(1) }
|
58
|
-
end
|
59
|
-
|
60
|
-
def test_cached_attribute_values_are_expired_from_the_cache_when_an_existing_record_is_destroyed
|
61
|
-
assert_queries(1) { assert_equal 'foo', AssociatedRecord.fetch_name_by_id(1) }
|
62
|
-
assert_queries(0) { assert_equal 'foo', AssociatedRecord.fetch_name_by_id(1) }
|
63
|
-
|
64
|
-
@record.destroy
|
65
|
-
|
66
|
-
assert_queries(1) { assert_nil AssociatedRecord.fetch_name_by_id(1) }
|
67
|
-
end
|
68
|
-
|
69
|
-
def test_cached_attribute_values_are_expired_from_the_cache_when_a_new_record_is_saved
|
70
|
-
new_id = 2
|
71
|
-
assert_queries(1) { assert_nil AssociatedRecord.fetch_name_by_id(new_id) }
|
72
|
-
assert_queries(0) { assert_nil AssociatedRecord.fetch_name_by_id(new_id) }
|
73
|
-
|
74
|
-
@parent.associated_records.create(:name => 'bar')
|
75
|
-
|
76
|
-
assert_queries(1) { assert_equal 'bar', AssociatedRecord.fetch_name_by_id(new_id) }
|
77
|
-
end
|
78
|
-
|
79
|
-
def test_fetching_by_attribute_delegates_to_block_if_transactions_are_open
|
80
|
-
IdentityCache.cache.expects(:read).never
|
81
|
-
|
82
|
-
@record.transaction do
|
83
|
-
assert_queries(1) do
|
84
|
-
assert_equal 'foo', AssociatedRecord.fetch_name_by_id(1)
|
85
|
-
end
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
|
-
def test_previously_stored_cached_nils_are_busted_by_new_record_saves
|
90
|
-
assert_nil AssociatedRecord.fetch_name_by_id(2)
|
91
|
-
AssociatedRecord.create(:name => "Jim")
|
92
|
-
assert_equal "Jim", AssociatedRecord.fetch_name_by_id(2)
|
93
|
-
end
|
94
|
-
|
95
|
-
def test_cache_attribute_on_derived_model_raises
|
96
|
-
assert_raises(IdentityCache::DerivedModelError) do
|
97
|
-
StiRecordTypeA.cache_attribute :name
|
98
|
-
end
|
99
|
-
end
|
100
|
-
|
101
|
-
def test_cache_attribute_respects_should_use_cache
|
102
|
-
AssociatedRecord.stubs(:should_use_cache?).returns(false)
|
103
|
-
|
104
|
-
assert_queries(1) do
|
105
|
-
assert_memcache_operations(0) do
|
106
|
-
AssociatedRecord.fetch_name_by_id(@record.id)
|
107
|
-
end
|
108
|
-
end
|
109
|
-
end
|
110
|
-
end
|
@@ -1,46 +0,0 @@
|
|
1
|
-
require "test_helper"
|
2
|
-
|
3
|
-
class CacheFetchIncludesTest < IdentityCache::TestCase
|
4
|
-
def setup
|
5
|
-
super
|
6
|
-
end
|
7
|
-
|
8
|
-
def test_cached_embedded_has_manys_are_included_in_includes
|
9
|
-
Item.send(:cache_has_many, :associated_records, :embed => true)
|
10
|
-
assert_equal [:associated_records], Item.send(:cache_fetch_includes)
|
11
|
-
end
|
12
|
-
|
13
|
-
def test_cached_nonembedded_has_manys_are_included_in_includes
|
14
|
-
Item.send(:cache_has_many, :associated_records, :embed => :ids)
|
15
|
-
assert_equal [], Item.send(:cache_fetch_includes)
|
16
|
-
end
|
17
|
-
|
18
|
-
def test_cached_has_ones_are_included_in_includes
|
19
|
-
Item.send(:cache_has_one, :associated)
|
20
|
-
assert_equal [:associated], Item.send(:cache_fetch_includes)
|
21
|
-
end
|
22
|
-
|
23
|
-
def test_cached_nonembedded_belongs_tos_are_not_included_in_includes
|
24
|
-
Item.send(:cache_belongs_to, :item)
|
25
|
-
assert_equal [], Item.send(:cache_fetch_includes)
|
26
|
-
end
|
27
|
-
|
28
|
-
def test_cached_child_associations_are_included_in_includes
|
29
|
-
Item.send(:cache_has_many, :associated_records, :embed => true)
|
30
|
-
AssociatedRecord.send(:cache_has_many, :deeply_associated_records, :embed => true)
|
31
|
-
assert_equal [{:associated_records => [:deeply_associated_records]}], Item.send(:cache_fetch_includes)
|
32
|
-
end
|
33
|
-
|
34
|
-
def test_multiple_cached_associations_and_child_associations_are_included_in_includes
|
35
|
-
Item.send(:cache_has_many, :associated_records, :embed => true)
|
36
|
-
PolymorphicRecord.send(:include, IdentityCache::WithoutPrimaryIndex)
|
37
|
-
Item.send(:cache_has_many, :polymorphic_records, {:inverse_name => :owner, :embed => true})
|
38
|
-
Item.send(:cache_has_one, :associated, :embed => true)
|
39
|
-
AssociatedRecord.send(:cache_has_many, :deeply_associated_records, :embed => true)
|
40
|
-
assert_equal [
|
41
|
-
{:associated_records => [:deeply_associated_records]},
|
42
|
-
:polymorphic_records,
|
43
|
-
{:associated => [:deeply_associated_records]}
|
44
|
-
], Item.send(:cache_fetch_includes)
|
45
|
-
end
|
46
|
-
end
|
data/test/cache_hash_test.rb
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
class CacheHashTest < IdentityCache::TestCase
|
4
|
-
|
5
|
-
def test_memcache_hash
|
6
|
-
3.times do
|
7
|
-
random_str = Array.new(200){rand(36).to_s(36)}.join
|
8
|
-
hash_val = IdentityCache.memcache_hash(random_str)
|
9
|
-
assert hash_val
|
10
|
-
assert_kind_of Numeric, hash_val
|
11
|
-
assert_equal 0, (hash_val >> 64)
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|