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.
Files changed (94) hide show
  1. checksums.yaml +5 -5
  2. data/.github/probots.yml +2 -0
  3. data/.github/workflows/ci.yml +92 -0
  4. data/.gitignore +2 -0
  5. data/.rubocop.yml +5 -0
  6. data/CAVEATS.md +25 -0
  7. data/CHANGELOG.md +73 -19
  8. data/Gemfile +5 -1
  9. data/LICENSE +1 -1
  10. data/README.md +49 -27
  11. data/Rakefile +14 -5
  12. data/dev.yml +12 -16
  13. data/gemfiles/Gemfile.latest-release +8 -0
  14. data/gemfiles/Gemfile.min-supported +7 -0
  15. data/gemfiles/Gemfile.rails-edge +7 -0
  16. data/identity_cache.gemspec +29 -10
  17. data/lib/identity_cache.rb +78 -51
  18. data/lib/identity_cache/belongs_to_caching.rb +12 -40
  19. data/lib/identity_cache/cache_fetcher.rb +6 -5
  20. data/lib/identity_cache/cache_hash.rb +2 -2
  21. data/lib/identity_cache/cache_invalidation.rb +4 -11
  22. data/lib/identity_cache/cache_key_generation.rb +17 -65
  23. data/lib/identity_cache/cache_key_loader.rb +128 -0
  24. data/lib/identity_cache/cached.rb +7 -0
  25. data/lib/identity_cache/cached/association.rb +87 -0
  26. data/lib/identity_cache/cached/attribute.rb +123 -0
  27. data/lib/identity_cache/cached/attribute_by_multi.rb +37 -0
  28. data/lib/identity_cache/cached/attribute_by_one.rb +88 -0
  29. data/lib/identity_cache/cached/belongs_to.rb +100 -0
  30. data/lib/identity_cache/cached/embedded_fetching.rb +41 -0
  31. data/lib/identity_cache/cached/prefetcher.rb +61 -0
  32. data/lib/identity_cache/cached/primary_index.rb +96 -0
  33. data/lib/identity_cache/cached/recursive/association.rb +109 -0
  34. data/lib/identity_cache/cached/recursive/has_many.rb +9 -0
  35. data/lib/identity_cache/cached/recursive/has_one.rb +9 -0
  36. data/lib/identity_cache/cached/reference/association.rb +16 -0
  37. data/lib/identity_cache/cached/reference/has_many.rb +105 -0
  38. data/lib/identity_cache/cached/reference/has_one.rb +100 -0
  39. data/lib/identity_cache/configuration_dsl.rb +53 -215
  40. data/lib/identity_cache/encoder.rb +95 -0
  41. data/lib/identity_cache/expiry_hook.rb +36 -0
  42. data/lib/identity_cache/fallback_fetcher.rb +2 -1
  43. data/lib/identity_cache/load_strategy/eager.rb +28 -0
  44. data/lib/identity_cache/load_strategy/lazy.rb +71 -0
  45. data/lib/identity_cache/load_strategy/load_request.rb +20 -0
  46. data/lib/identity_cache/load_strategy/multi_load_request.rb +27 -0
  47. data/lib/identity_cache/mem_cache_store_cas.rb +53 -0
  48. data/lib/identity_cache/memoized_cache_proxy.rb +137 -58
  49. data/lib/identity_cache/parent_model_expiration.rb +46 -11
  50. data/lib/identity_cache/query_api.rb +102 -408
  51. data/lib/identity_cache/railtie.rb +8 -0
  52. data/lib/identity_cache/record_not_found.rb +6 -0
  53. data/lib/identity_cache/should_use_cache.rb +1 -0
  54. data/lib/identity_cache/version.rb +3 -2
  55. data/lib/identity_cache/with_primary_index.rb +136 -0
  56. data/lib/identity_cache/without_primary_index.rb +24 -3
  57. data/performance/cache_runner.rb +25 -73
  58. data/performance/cpu.rb +4 -3
  59. data/performance/externals.rb +4 -3
  60. data/performance/profile.rb +6 -5
  61. data/railgun.yml +16 -0
  62. metadata +60 -73
  63. data/.travis.yml +0 -30
  64. data/Gemfile.rails42 +0 -6
  65. data/Gemfile.rails50 +0 -6
  66. data/test/attribute_cache_test.rb +0 -110
  67. data/test/cache_fetch_includes_test.rb +0 -46
  68. data/test/cache_hash_test.rb +0 -14
  69. data/test/cache_invalidation_test.rb +0 -139
  70. data/test/deeply_nested_associated_record_test.rb +0 -19
  71. data/test/denormalized_has_many_test.rb +0 -211
  72. data/test/denormalized_has_one_test.rb +0 -160
  73. data/test/fetch_multi_test.rb +0 -308
  74. data/test/fetch_test.rb +0 -258
  75. data/test/fixtures/serialized_record.mysql2 +0 -0
  76. data/test/fixtures/serialized_record.postgresql +0 -0
  77. data/test/helpers/active_record_objects.rb +0 -106
  78. data/test/helpers/database_connection.rb +0 -72
  79. data/test/helpers/serialization_format.rb +0 -42
  80. data/test/helpers/update_serialization_format.rb +0 -24
  81. data/test/identity_cache_test.rb +0 -29
  82. data/test/index_cache_test.rb +0 -161
  83. data/test/memoized_attributes_test.rb +0 -49
  84. data/test/memoized_cache_proxy_test.rb +0 -107
  85. data/test/normalized_belongs_to_test.rb +0 -107
  86. data/test/normalized_has_many_test.rb +0 -231
  87. data/test/normalized_has_one_test.rb +0 -9
  88. data/test/prefetch_associations_test.rb +0 -364
  89. data/test/readonly_test.rb +0 -109
  90. data/test/recursive_denormalized_has_many_test.rb +0 -131
  91. data/test/save_test.rb +0 -82
  92. data/test/schema_change_test.rb +0 -112
  93. data/test/serialization_format_change_test.rb +0 -16
  94. 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: 0.4.1
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: 2017-02-02 00:00:00.000000000 Z
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.0'
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.0'
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: 4.2.0
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: 4.2.0
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 in read through ActiveRecord caching.
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
- - ".travis.yml"
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.2.0
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
- rubyforge_project:
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: []
@@ -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
@@ -1,6 +0,0 @@
1
- source 'https://rubygems.org'
2
- gemspec
3
-
4
- gem 'activerecord', '~> 4.2.0'
5
- gem 'activesupport', '~> 4.2.0'
6
- gem 'mysql2', '~> 0.3.13'
@@ -1,6 +0,0 @@
1
- source 'https://rubygems.org'
2
- gemspec
3
-
4
- gem 'activerecord', '~> 5.0.0'
5
- gem 'activesupport', '~> 5.0.0'
6
- gem 'mysql2', '>= 0.3.18', '< 0.5'
@@ -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
@@ -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