identity_cache 1.2.0 → 1.3.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 +4 -4
- data/.github/workflows/ci.yml +3 -3
- data/CHANGELOG.md +11 -0
- data/dev.yml +1 -1
- data/lib/identity_cache/cache_key_loader.rb +1 -1
- data/lib/identity_cache/cached/attribute.rb +6 -2
- data/lib/identity_cache/parent_model_expiration.rb +3 -2
- data/lib/identity_cache/query_api.rb +10 -6
- data/lib/identity_cache/version.rb +1 -1
- data/lib/identity_cache/with_primary_index.rb +12 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dedbf4998ab4c83ea5d6198af733c3165b9978bd509d9cb135aefd1c1979415d
|
4
|
+
data.tar.gz: 03cda95c71ef97b89d2b321cbbf8737f12cb841a7eb89bc072419e3fb06b9b9d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9e81b1259c650b6043e890ea3cdcba24c8e27442ae1609868c82eb1ec2fc2cfb89aae26693bda3cd5489937e78ab959d2fc8c101528238ebdb02bd20832d1408
|
7
|
+
data.tar.gz: f5bec7a26ff5d896915c6644d475f92429934f179e5d51e8eff9cfa491c117451d542ef6c745509bfead84b631df08ff8f9c8f5dba4b6076ee5b1baf789e94c6
|
data/.github/workflows/ci.yml
CHANGED
@@ -16,14 +16,14 @@ jobs:
|
|
16
16
|
matrix:
|
17
17
|
entry:
|
18
18
|
- name: 'Minimum supported'
|
19
|
-
ruby: '2.
|
19
|
+
ruby: '2.7'
|
20
20
|
gemfile: "Gemfile.min-supported"
|
21
21
|
- name: 'Latest released & run rubocop'
|
22
|
-
ruby: '3.
|
22
|
+
ruby: '3.2'
|
23
23
|
gemfile: "Gemfile.latest-release"
|
24
24
|
rubocop: true
|
25
25
|
- name: 'Rails edge'
|
26
|
-
ruby: '3.
|
26
|
+
ruby: '3.2'
|
27
27
|
gemfile: "Gemfile.rails-edge"
|
28
28
|
edge: true
|
29
29
|
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,16 @@
|
|
1
1
|
# Identity Cache Changelog
|
2
2
|
|
3
|
+
## unreleased
|
4
|
+
|
5
|
+
## 1.3.0
|
6
|
+
|
7
|
+
### Features
|
8
|
+
- Return meaningful value from `expire_cache` indicating whenever it succeeded or failed in the process. (#523)
|
9
|
+
|
10
|
+
### Fixes
|
11
|
+
- Expire parents cache when when calling `expire_cache`. (#523)
|
12
|
+
- Avoid creating too many shapes on Ruby 3.2+. (#526)
|
13
|
+
|
3
14
|
## 1.2.0
|
4
15
|
|
5
16
|
### Fixes
|
data/dev.yml
CHANGED
@@ -44,7 +44,7 @@ module IdentityCache
|
|
44
44
|
# @param db_key [Array] Reference to what to load from the database.
|
45
45
|
# @return [Hash] A hash mapping each database key to its corresponding value
|
46
46
|
def load_multi(cache_fetcher, db_keys)
|
47
|
-
load_batch(cache_fetcher => db_keys).fetch(cache_fetcher)
|
47
|
+
load_batch({ cache_fetcher => db_keys }).fetch(cache_fetcher)
|
48
48
|
end
|
49
49
|
|
50
50
|
# Load multiple keys for multiple cache fetchers
|
@@ -35,16 +35,20 @@ module IdentityCache
|
|
35
35
|
end
|
36
36
|
|
37
37
|
def expire(record)
|
38
|
+
all_deleted = true
|
39
|
+
|
38
40
|
unless record.send(:was_new_record?)
|
39
41
|
old_key = old_cache_key(record)
|
40
|
-
IdentityCache.cache.delete(old_key)
|
42
|
+
all_deleted = IdentityCache.cache.delete(old_key)
|
41
43
|
end
|
42
44
|
unless record.destroyed?
|
43
45
|
new_key = new_cache_key(record)
|
44
46
|
if new_key != old_key
|
45
|
-
IdentityCache.cache.delete(new_key)
|
47
|
+
all_deleted = IdentityCache.cache.delete(new_key) && all_deleted
|
46
48
|
end
|
47
49
|
end
|
50
|
+
|
51
|
+
all_deleted
|
48
52
|
end
|
49
53
|
|
50
54
|
def cache_key(index_key)
|
@@ -45,8 +45,9 @@ module IdentityCache
|
|
45
45
|
def expire_parent_caches
|
46
46
|
parents_to_expire = Set.new
|
47
47
|
add_parents_to_cache_expiry_set(parents_to_expire)
|
48
|
-
parents_to_expire.
|
49
|
-
|
48
|
+
parents_to_expire.select! { |parent| parent.class.primary_cache_index_enabled }
|
49
|
+
parents_to_expire.reduce(true) do |all_expired, parent|
|
50
|
+
parent.expire_primary_index && all_expired
|
50
51
|
end
|
51
52
|
end
|
52
53
|
|
@@ -166,15 +166,17 @@ module IdentityCache
|
|
166
166
|
def _run_commit_callbacks
|
167
167
|
if destroyed? || transaction_changed_attributes.present?
|
168
168
|
expire_cache
|
169
|
-
expire_parent_caches
|
170
169
|
end
|
171
170
|
super
|
172
171
|
end
|
173
172
|
|
174
|
-
# Invalidate the cache data associated with the record.
|
173
|
+
# Invalidate the cache data associated with the record. Returns `true` on success,
|
174
|
+
# `false` otherwise.
|
175
175
|
def expire_cache
|
176
|
-
|
177
|
-
|
176
|
+
expired_parent_caches = expire_parent_caches
|
177
|
+
expired_attribute_indexes = expire_attribute_indexes
|
178
|
+
|
179
|
+
expired_parent_caches && expired_attribute_indexes
|
178
180
|
end
|
179
181
|
|
180
182
|
# @api private
|
@@ -185,9 +187,11 @@ module IdentityCache
|
|
185
187
|
|
186
188
|
private
|
187
189
|
|
190
|
+
# Even if we have problems with some attributes, carry over the results and expire
|
191
|
+
# all possible attributes without array allocation.
|
188
192
|
def expire_attribute_indexes # :nodoc:
|
189
|
-
cache_indexes.
|
190
|
-
cached_attribute.expire(self)
|
193
|
+
cache_indexes.reduce(true) do |all_expired, cached_attribute|
|
194
|
+
cached_attribute.expire(self) && all_expired
|
191
195
|
end
|
192
196
|
end
|
193
197
|
end
|
@@ -7,8 +7,9 @@ module IdentityCache
|
|
7
7
|
include WithoutPrimaryIndex
|
8
8
|
|
9
9
|
def expire_cache
|
10
|
-
expire_primary_index
|
11
|
-
|
10
|
+
expired_primary_index = expire_primary_index
|
11
|
+
|
12
|
+
super && expired_primary_index
|
12
13
|
end
|
13
14
|
|
14
15
|
# @api private
|
@@ -158,6 +159,15 @@ module IdentityCache
|
|
158
159
|
def expire_primary_key_cache_index(id)
|
159
160
|
cached_primary_index.expire(id)
|
160
161
|
end
|
162
|
+
|
163
|
+
private
|
164
|
+
|
165
|
+
def inherited(subclass)
|
166
|
+
super
|
167
|
+
subclass.class_eval do
|
168
|
+
@cached_primary_index = nil
|
169
|
+
end
|
170
|
+
end
|
161
171
|
end
|
162
172
|
end
|
163
173
|
end
|
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: 1.
|
4
|
+
version: 1.3.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: 2023-01-16 00:00:00.000000000 Z
|
18
18
|
dependencies:
|
19
19
|
- !ruby/object:Gem::Dependency
|
20
20
|
name: activerecord
|