counter_culture 3.9.0 → 3.10.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: f93d3d3e415f5d92e3870caf67067cdb75a6a76f68542b82c9ec2411987a0e4d
4
- data.tar.gz: 89cf5171b549aab368a1dd87117afd429bf557d93f198e220fbe3b2a24e81f20
3
+ metadata.gz: 78d568cfdb319852f7cbfa1f09b3b17d7a583f0a56afcba26ffc6db937906c0f
4
+ data.tar.gz: 220516dcbbe2966749fd1c74a6720e9bb82565bba0b41f053fc94c9948db4b73
5
5
  SHA512:
6
- metadata.gz: 17b50c40207f615d0018c142062e536c3da69bebab209d4facb63ee03273363d97f83675d173f3096f98c68393f374e39aae0dba0db6364de9bc3c83d38af160
7
- data.tar.gz: d7bef1c4214a30fa9888843c35fe2f074ea89e78b9341b5ed458471934576dea9ef8bf12fac72bd549a532fc50d34b9e327c4f2b943e7965720f3b12bef503b6
6
+ metadata.gz: 5fb91dc191fad8487358613ac76eae7887113b7191ced1b59acde6a84963c2813787c1036a07490f4579e423bb9cedcf3ba324b6d2f4e1cac903cf5721949445
7
+ data.tar.gz: c86cf4baee69aceec50718877ab0fd9ff6064bd460d4f0fff8615eb0836cc5c3d74e44178fbd87976a7eab18a106a5f25e09179a85380a93472cbf1e715f14ce
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ ## 3.10.0 (April 15, 2025)
2
+
3
+ New features:
4
+ - Update counter cache values without requiring a reload (#407)
5
+
1
6
  ## 3.9.0 (March 20, 2025)
2
7
 
3
8
  New features:
@@ -138,6 +138,7 @@ module CounterCulture
138
138
  unless Thread.current[:aggregate_counter_updates]
139
139
  execute_now_or_after_commit(obj) do
140
140
  klass.where(primary_key => id_to_change).update_all updates.join(', ')
141
+ assign_to_associated_object(obj, relation, change_counter_column, operator, delta_magnitude)
141
142
  end
142
143
  end
143
144
  end
@@ -365,6 +366,33 @@ module CounterCulture
365
366
  obj.public_send("#{attr}#{changes_method}")
366
367
  end
367
368
 
369
+ # update associated object counter attribute
370
+ def assign_to_associated_object(obj, relation, change_counter_column, operator, delta_magnitude)
371
+ association_name = relation_reflect(relation).name
372
+
373
+ return unless obj.respond_to?(association_name)
374
+
375
+ if obj.association(association_name).loaded? && (association_object = obj.public_send(association_name)).present?
376
+ association_object.assign_attributes(
377
+ change_counter_column =>
378
+ association_object_new_counter(association_object, change_counter_column, operator, delta_magnitude)
379
+ )
380
+ association_object_clear_change(association_object, change_counter_column)
381
+ end
382
+ end
383
+
384
+ def association_object_clear_change(association_object, change_counter_column)
385
+ if ACTIVE_RECORD_VERSION >= Gem::Version.new("6.1.0")
386
+ association_object.public_send(:"clear_#{change_counter_column}_change")
387
+ else
388
+ association_object.send(:clear_attribute_change, change_counter_column)
389
+ end
390
+ end
391
+
392
+ def association_object_new_counter(association_object, change_counter_column, operator, delta_magnitude)
393
+ (association_object.public_send(change_counter_column) || 0).public_send(operator, delta_magnitude)
394
+ end
395
+
368
396
  def assemble_money_counter_update(klass, id_to_change, quoted_column, operator, delta_magnitude)
369
397
  counter_update_snippet(
370
398
  "#{quoted_column} = COALESCE(CAST(#{quoted_column} as NUMERIC), 0)",
@@ -1,3 +1,3 @@
1
1
  module CounterCulture
2
- VERSION = '3.9.0'.freeze
2
+ VERSION = '3.10.0'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: counter_culture
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.9.0
4
+ version: 3.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Magnus von Koeller
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2025-03-20 00:00:00.000000000 Z
11
+ date: 2025-04-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord