incrdecr_cached_counts 0.5.0 → 0.7.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5c0a0f2090aabd3b286436ad4bce2dca587f003cb5c19307be1d7974c84894ab
4
- data.tar.gz: 546850171cb6d859149155acd0a6c3cc4697702306c7e7d7015c6a6e86bc4066
3
+ metadata.gz: 65f000f6f11bec569b0c22d96041b54a76c7ae97fa8cad585f9652e1ccc298ea
4
+ data.tar.gz: 1f16dee9e6cef13c66c96de022a894461769ee09fc47871ee6c68645d7efee22
5
5
  SHA512:
6
- metadata.gz: dc5aa5c3e0977528853821aa6d11484f1bfccbb8c435c003ea4c90856cac06933448c52707884dd182a5727f04c701ff5a5bf21d8454b695637a62fd0860ed72
7
- data.tar.gz: 7ce3ec421d5bea4a5f6e1a5a80c341fcb603f8288a13751058afb9ced3aea58ceae75668a42522132d3f3246e5955a60a16ecf80f6b9a1b6d6017a1286e9f9b1
6
+ metadata.gz: 44a2889f0308a275bac293e526106ddedeffd947224737613a7dec6c050d07e4b9e8a2c3ab2326a6cdc321fad3bbbc8bd3078a0c6d240fab6cd5427968d5ea01
7
+ data.tar.gz: 8beafe928a06926c652e3130e41aab35fc5f362b1fa56189c0d04bda9cf52904eadc9b741f48d664f331b6aa2a5ec7ad0bbe1513fd387af292119217de904dff
@@ -21,6 +21,7 @@ Gem::Specification.new do |s|
21
21
 
22
22
  s.add_dependency "rails", ">= 5.2"
23
23
  s.add_dependency "dalli"
24
+ s.add_dependency "concurrent-ruby", "1.3.4"
24
25
 
25
26
  s.add_development_dependency "sqlite3"
26
27
  s.add_development_dependency "rspec"
@@ -1,3 +1,3 @@
1
1
  module CachedCounts
2
- VERSION = "0.5.0"
2
+ VERSION = "0.7.0"
3
3
  end
data/lib/cached_counts.rb CHANGED
@@ -156,19 +156,9 @@ module CachedCounts
156
156
  end
157
157
 
158
158
  def default_race_condition_fallback_proc(key, relation, options)
159
- fallback = Rails.cache.read(key)
159
+ fallback = Rails.cache.read(key, raw: true)
160
160
  fallback = fallback.value if fallback.is_a?(ActiveSupport::Cache::Entry)
161
161
 
162
- if fallback.nil?
163
- begin
164
- fallback = relation.count
165
- rescue ActiveRecord::StatementInvalid => e
166
- fallback = 0
167
- end
168
-
169
- Rails.cache.write key, fallback, expires_in: options.fetch(:expires_in, 1.week), raw: true
170
- end
171
-
172
162
  -> { fallback }
173
163
  end
174
164
 
@@ -186,7 +176,7 @@ module CachedCounts
186
176
 
187
177
  # Try to fetch values for ids from the cache. If it's a miss return the default value
188
178
  define_singleton_method "try_#{attr_name}_counts_for" do |ids, default=nil|
189
- raw_result = Rails.cache.read_multi(*ids.map{|id| association_count_key(id, attribute_name, version)})
179
+ raw_result = Rails.cache.read_multi(*ids.map{|id| association_count_key(id, attribute_name, version)}, raw: true)
190
180
 
191
181
  result = {}
192
182
  ids.each do |id|
@@ -253,13 +243,16 @@ module CachedCounts
253
243
  # Ensure that other reads find something in the cache, but
254
244
  # continue calculating here because the default is likely inaccurate.
255
245
  fallback_value = instance_exec &race_condition_fallback
256
- CachedCounts.logger.warn "Setting #{fallback_value} as race_condition_fallback for #{send(key_method)}"
257
- Rails.cache.write(
258
- send(key_method),
259
- fallback_value.to_i,
260
- expires_in: 30.seconds,
261
- raw: true
262
- )
246
+
247
+ if fallback_value
248
+ CachedCounts.logger.warn "Setting #{fallback_value} as race_condition_fallback for #{send(key_method)}"
249
+ Rails.cache.write(
250
+ send(key_method),
251
+ fallback_value.to_i,
252
+ expires_in: 30.seconds,
253
+ raw: true
254
+ )
255
+ end
263
256
  end
264
257
 
265
258
  relation = instance_exec(&relation_getter)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: incrdecr_cached_counts
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Judd
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-01-13 00:00:00.000000000 Z
11
+ date: 2025-03-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: concurrent-ruby
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '='
46
+ - !ruby/object:Gem::Version
47
+ version: 1.3.4
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '='
53
+ - !ruby/object:Gem::Version
54
+ version: 1.3.4
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: sqlite3
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -143,7 +157,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
143
157
  - !ruby/object:Gem::Version
144
158
  version: '0'
145
159
  requirements: []
146
- rubygems_version: 3.1.4
160
+ rubygems_version: 3.4.10
147
161
  signing_key:
148
162
  specification_version: 4
149
163
  summary: A replacement for Rails' counter caches using memcached (via Dalli)