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 +4 -4
- data/CHANGELOG.md +5 -0
- data/lib/counter_culture/counter.rb +28 -0
- data/lib/counter_culture/version.rb +1 -1
- 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: 78d568cfdb319852f7cbfa1f09b3b17d7a583f0a56afcba26ffc6db937906c0f
|
4
|
+
data.tar.gz: 220516dcbbe2966749fd1c74a6720e9bb82565bba0b41f053fc94c9948db4b73
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5fb91dc191fad8487358613ac76eae7887113b7191ced1b59acde6a84963c2813787c1036a07490f4579e423bb9cedcf3ba324b6d2f4e1cac903cf5721949445
|
7
|
+
data.tar.gz: c86cf4baee69aceec50718877ab0fd9ff6064bd460d4f0fff8615eb0836cc5c3d74e44178fbd87976a7eab18a106a5f25e09179a85380a93472cbf1e715f14ce
|
data/CHANGELOG.md
CHANGED
@@ -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)",
|
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.
|
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-
|
11
|
+
date: 2025-04-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|