acts_as_trackable 0.4.3 → 0.4.4

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: fe57cd1a0aa59befd8065f81bc9a7800072c6779775ce3e0f03205128bb09c0b
4
- data.tar.gz: 339d18abf2766051d60d2bddba1939b2d6b0fa5ffd07d249508ded87f12224ef
3
+ metadata.gz: 2a7d07c3e789702cf675c58c1228f05eada87d244a6026eaf2fdc0da02dc8252
4
+ data.tar.gz: c2e5d21b078655af1c99e3eb2aad715097358d56b270e3966b6d837d74b70585
5
5
  SHA512:
6
- metadata.gz: 3fa0b497529b74d0cc9a328c777dea23c2b7b946e8c9a18d6b3d93d83cd2d4d678783f295b3cd622e8a0366445a16fdfe5889e81159cc25a45ad85b918ba3938
7
- data.tar.gz: 4d83c9daeafa0944bb92fcde1b014bdeff9cff1e898f074f6594901dd8880144dd50ea1cca803779013b8471b47c874562e0c38174507eaec1bd8059dbe904db
6
+ metadata.gz: 4c931b3512e64bd8b3c81c4cf643c1a18d88590f5ed373a6827dcd46ea7aced9ae5eb5e88735ff31bdd16971630cfc1bd978bbcd24ee551fdbae7b752c0b1ab1
7
+ data.tar.gz: b957972825b35a55434ff794ca1c77222b46bfc8c51f393c46c15d83fa28f3953f2d02669c284d1af450f99ed771b967ee1b95e4483d0ef411685cc2f5b00388
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- acts_as_trackable (0.4.3)
4
+ acts_as_trackable (0.4.4)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
data/changelog.md CHANGED
@@ -1,4 +1,11 @@
1
1
  # acts_as_trackable Changelog
2
+ ## Version: 0.4.4
3
+ ### Patch
4
+ - Critical Fix: Properly cache `nil` when `object_activity` is preloaded but doesn't exist (old records).
5
+ - Prevents N+1 queries when accessing `created_by`/`updated_by` on records without `object_activity`.
6
+ - Previously, the fallback query would execute for each record even when using `includes(object_activity: [:created_by, :updated_by])`.
7
+ - Now correctly returns `nil` without database queries when association is preloaded and empty.
8
+
2
9
  ## Version: 0.4.3
3
10
  ### Patch
4
11
  - Performance Fix: Fixed N+1 query issue when accessing `created_by` and `updated_by` after eager loading.
@@ -16,14 +16,17 @@ module Trackable
16
16
  if association(:object_activity).loaded?
17
17
  loaded = association(:object_activity).target
18
18
 
19
- if loaded&.object_id == id &&
20
- [self.class.name, self.class.base_class.name].include?(loaded.object_type)
21
- @object_activity = loaded
19
+ # Cache the loaded value (even if nil) to avoid fallback query
20
+ if loaded.nil?
21
+ return @object_activity = nil
22
+ elsif loaded[:object_id] == id &&
23
+ [self.class.name, self.class.base_class.name].include?(loaded.object_type)
24
+ return @object_activity = loaded
22
25
  end
23
26
  end
24
27
 
25
28
  # Fallback to DB query if not preloaded or not matched
26
- @object_activity ||= ObjectActivity.find_by(
29
+ @object_activity = ObjectActivity.find_by(
27
30
  object_id: id,
28
31
  object_type: [self.class.name, self.class.base_class.name]
29
32
  )
@@ -37,12 +40,12 @@ module Trackable
37
40
  return @created_by if defined?(@created_by)
38
41
 
39
42
  # Check if created_by is preloaded on the object_activity
40
- if object_activity.association(:created_by).loaded?
41
- @created_by = object_activity.association(:created_by).target
42
- else
43
- # Fallback to default association behavior
44
- @created_by = object_activity.created_by
45
- end
43
+ @created_by = if object_activity.association(:created_by).loaded?
44
+ object_activity.association(:created_by).target
45
+ else
46
+ # Fallback to default association behavior
47
+ object_activity.created_by
48
+ end
46
49
  end
47
50
 
48
51
  # Custom updated_by method that respects preloading
@@ -53,12 +56,12 @@ module Trackable
53
56
  return @updated_by if defined?(@updated_by)
54
57
 
55
58
  # Check if updated_by is preloaded on the object_activity
56
- if object_activity.association(:updated_by).loaded?
57
- @updated_by = object_activity.association(:updated_by).target
58
- else
59
- # Fallback to default association behavior
60
- @updated_by = object_activity.updated_by
61
- end
59
+ @updated_by = if object_activity.association(:updated_by).loaded?
60
+ object_activity.association(:updated_by).target
61
+ else
62
+ # Fallback to default association behavior
63
+ object_activity.updated_by
64
+ end
62
65
  end
63
66
 
64
67
  after_commit :log_object_activity, on: %i[create update], if: -> { modifier.present? }
@@ -1,3 +1,3 @@
1
1
  module ActsAsTrackable
2
- VERSION = '0.4.3'.freeze
2
+ VERSION = '0.4.4'.freeze
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: acts_as_trackable
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.3
4
+ version: 0.4.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ahmad Keewan
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2025-10-05 00:00:00.000000000 Z
12
+ date: 2025-10-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: generator_spec