identity_cache 0.4.1 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/lib/identity_cache.rb +2 -4
- data/lib/identity_cache/query_api.rb +2 -2
- data/lib/identity_cache/version.rb +2 -2
- data/test/denormalized_has_many_test.rb +3 -0
- data/test/fetch_multi_test.rb +1 -1
- data/test/fetch_test.rb +1 -1
- data/test/fixtures/serialized_record.mysql2 +0 -0
- data/test/fixtures/serialized_record.postgresql +0 -0
- data/test/helpers/serialization_format.rb +10 -1
- data/test/helpers/update_serialization_format.rb +4 -1
- data/test/memoized_attributes_test.rb +10 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 11bd2d6f14e2b77b00c8bd58dd0731fa2976a81a
|
4
|
+
data.tar.gz: 4d547e1b739ce13b443dfb9ea44416a81936ed95
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 63aa5192013b0d99b426e0b1cf70ea6962924a57da29beaac507b4d5dae458693822a55cd24bc743768826d7b725592b456c0ca68cc9655df5509100a0ab68b3
|
7
|
+
data.tar.gz: 99cab0e7c1b4d8a4a5378b408582486404182e86529d4e62926d29ab3c021a2ff9af02a4af05d0a5eae4cd6996a76f4588a4e03584645025d7c7131a122407fd
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,10 @@
|
|
1
1
|
# IdentityCache changelog
|
2
2
|
|
3
|
+
#### 0.5.0
|
4
|
+
|
5
|
+
- `never_set_inverse_association` and `fetch_read_only_records` are now `true` by default (#315)
|
6
|
+
- Store the class name instead of the class itself (#311)
|
7
|
+
|
3
8
|
#### 0.4.1
|
4
9
|
|
5
10
|
- Deprecated embedded associations on models that don't use IDC (#305)
|
data/lib/identity_cache.rb
CHANGED
@@ -53,19 +53,17 @@ module IdentityCache
|
|
53
53
|
mattr_accessor :cache_namespace
|
54
54
|
self.cache_namespace = "IDC:#{CACHE_VERSION}:".freeze
|
55
55
|
|
56
|
-
version = Gem::Version.new(IdentityCache::VERSION)
|
57
|
-
|
58
56
|
# Inverse active record associations are set when loading embedded
|
59
57
|
# cache_has_many associations from the cache when never_set_inverse_association
|
60
58
|
# is false. When set to true, it will only set the inverse cached association.
|
61
59
|
mattr_accessor :never_set_inverse_association
|
62
|
-
self.never_set_inverse_association =
|
60
|
+
self.never_set_inverse_association = true
|
63
61
|
|
64
62
|
# Fetched records are not read-only and this could sometimes prevent IDC from
|
65
63
|
# reflecting what's truly in the database when fetch_read_only_records is false.
|
66
64
|
# When set to true, it will only return read-only records when cache is used.
|
67
65
|
mattr_accessor :fetch_read_only_records
|
68
|
-
self.fetch_read_only_records =
|
66
|
+
self.fetch_read_only_records = true
|
69
67
|
|
70
68
|
def included(base) #:nodoc:
|
71
69
|
raise AlreadyIncludedError if base.respond_to?(:cached_model)
|
@@ -122,7 +122,7 @@ module IdentityCache
|
|
122
122
|
|
123
123
|
def record_from_coder(coder) #:nodoc:
|
124
124
|
if coder
|
125
|
-
klass = coder[:class]
|
125
|
+
klass = coder[:class].constantize
|
126
126
|
record = klass.instantiate(coder[:attributes].dup)
|
127
127
|
|
128
128
|
coder[:associations].each {|name, value| set_embedded_association(record, name, value) } if coder.has_key?(:associations)
|
@@ -179,7 +179,7 @@ module IdentityCache
|
|
179
179
|
unless record.nil?
|
180
180
|
coder = {
|
181
181
|
attributes: record.attributes_before_type_cast.dup,
|
182
|
-
class: record.class,
|
182
|
+
class: record.class.name,
|
183
183
|
}
|
184
184
|
add_cached_associations_to_coder(record, coder)
|
185
185
|
coder
|
@@ -130,12 +130,15 @@ class DenormalizedHasManyTest < IdentityCache::TestCase
|
|
130
130
|
end
|
131
131
|
|
132
132
|
def test_deprecated_set_inverse_association_on_cache_hit
|
133
|
+
IdentityCache.never_set_inverse_association = false
|
133
134
|
Item.fetch(@record.id) # warm cache
|
134
135
|
|
135
136
|
item = Item.fetch(@record.id)
|
136
137
|
|
137
138
|
associated_record = item.fetch_associated_records.to_a.first
|
138
139
|
assert_equal item.object_id, associated_record.item.object_id
|
140
|
+
ensure
|
141
|
+
IdentityCache.never_set_inverse_association = true
|
139
142
|
end
|
140
143
|
|
141
144
|
def test_returned_records_should_be_readonly_on_cache_hit
|
data/test/fetch_multi_test.rb
CHANGED
@@ -286,7 +286,7 @@ class FetchMultiTest < IdentityCache::TestCase
|
|
286
286
|
end
|
287
287
|
|
288
288
|
def cache_response_for(record)
|
289
|
-
{class: record.class, attributes: record.attributes_before_type_cast}
|
289
|
+
{ class: record.class.name, attributes: record.attributes_before_type_cast }
|
290
290
|
end
|
291
291
|
|
292
292
|
def with_batch_size(size)
|
data/test/fetch_test.rb
CHANGED
@@ -11,7 +11,7 @@ class FetchTest < IdentityCache::TestCase
|
|
11
11
|
@record = Item.new
|
12
12
|
@record.id = 1
|
13
13
|
@record.title = 'bob'
|
14
|
-
@cached_value = {class: @record.class, attributes: @record.attributes_before_type_cast}
|
14
|
+
@cached_value = { class: @record.class.name, attributes: @record.attributes_before_type_cast }
|
15
15
|
@blob_key = "#{NAMESPACE}blob:Item:#{cache_hash("created_at:datetime,id:integer,item_id:integer,title:string,updated_at:datetime")}:1"
|
16
16
|
@index_key = "#{NAMESPACE}attr:Item:id:title:#{cache_hash('bob')}"
|
17
17
|
end
|
Binary file
|
Binary file
|
@@ -20,7 +20,16 @@ module SerializationFormat
|
|
20
20
|
end
|
21
21
|
record.reload
|
22
22
|
Item.fetch(record.id)
|
23
|
-
|
23
|
+
|
24
|
+
IdentityCache.fetch(record.primary_cache_index_key) do
|
25
|
+
STDERR.puts(
|
26
|
+
"\e[31m" \
|
27
|
+
"The record could not be retrieved from the cache." \
|
28
|
+
"Did you configure MEMCACHED_HOST?" \
|
29
|
+
"\e[0m",
|
30
|
+
)
|
31
|
+
exit(1)
|
32
|
+
end
|
24
33
|
end
|
25
34
|
|
26
35
|
def serialized_record_file
|
@@ -16,7 +16,10 @@ DatabaseConnection.setup
|
|
16
16
|
DatabaseConnection.drop_tables
|
17
17
|
DatabaseConnection.create_tables
|
18
18
|
IdentityCache.logger = Logger.new(nil)
|
19
|
-
IdentityCache.cache_backend = ActiveSupport::Cache::MemcachedStore.new(
|
19
|
+
IdentityCache.cache_backend = ActiveSupport::Cache::MemcachedStore.new(
|
20
|
+
"#{ENV["MEMCACHED_HOST"] || "localhost"}:11211",
|
21
|
+
:support_cas => true,
|
22
|
+
)
|
20
23
|
setup_models
|
21
24
|
File.open(serialized_record_file, 'w') {|file| serialize(serialized_record, file) }
|
22
25
|
puts "Serialized record to #{serialized_record_file}"
|
@@ -1,6 +1,16 @@
|
|
1
1
|
require "test_helper"
|
2
2
|
|
3
3
|
class MemoizedAttributesTest < IdentityCache::TestCase
|
4
|
+
def setup
|
5
|
+
IdentityCache.fetch_read_only_records = false
|
6
|
+
super
|
7
|
+
end
|
8
|
+
|
9
|
+
def teardown
|
10
|
+
super
|
11
|
+
IdentityCache.fetch_read_only_records = true
|
12
|
+
end
|
13
|
+
|
4
14
|
def test_memoization_should_not_break_dirty_tracking_with_empty_cache
|
5
15
|
item = Item.create!
|
6
16
|
|
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
|
+
version: 0.5.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-
|
17
|
+
date: 2017-02-07 00:00:00.000000000 Z
|
18
18
|
dependencies:
|
19
19
|
- !ruby/object:Gem::Dependency
|
20
20
|
name: ar_transaction_changes
|
@@ -270,7 +270,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
270
270
|
version: '0'
|
271
271
|
requirements: []
|
272
272
|
rubyforge_project:
|
273
|
-
rubygems_version: 2.5.
|
273
|
+
rubygems_version: 2.5.2
|
274
274
|
signing_key:
|
275
275
|
specification_version: 4
|
276
276
|
summary: IdentityCache lets you specify how you want to cache your model objects,
|