immosquare-active-record-change-tracker 0.1.4 → 0.1.5

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: 277ddb50fbedfc0569e1f7e4a61d54252df1ef5402c398eee5dfb0bd469d90a9
4
- data.tar.gz: 81ba5ed9aae9a90c05a9be743cf1adf6f3cf027ac4859275f6a650678dc8a500
3
+ metadata.gz: c45fff508dbb3ba604cd8f4edb7ed21011adf6eacf2ce3c31c0037bb7cbaf6a5
4
+ data.tar.gz: e03e4dbd003973dc0899f93649433f2d8dde8ada78e1b1ffb087e52578642947
5
5
  SHA512:
6
- metadata.gz: b82d2dcd49840b346f1550e5f80b552c52111fdcf6c08ba8f5234d0814ff66bb3ad1763cd2c9226282b26d34f19a3ff36245e7ce0424cebbc8a0aa342edd9c2a
7
- data.tar.gz: af57bca752c1092ae5f346e6f3c6a2189166780e2fa9efaae441d318152e90a57fb38906994b225956050a1863b7afab19686e7e7eee957bb12c72250382eb91
6
+ metadata.gz: 9be8b85fbba788bc7af1cdb9ddb5f8489b4ca311e5f60a60438a2078c240a84772a08eb99e7190b032e76e9cd9e6c253a6577af5ce3b8be608b5bb476c04b676
7
+ data.tar.gz: 26cf27788d62ee7451c9986cd1d604dca7963cf926abdf387cf7261883b940822449cf200abf813e84255ebc401156fcbd93686844365b03567cd861b19f1eda
@@ -8,8 +8,8 @@ module ImmosquareActiveRecordChangeTracker
8
8
  self.table_name = "active_record_change_trackers"
9
9
 
10
10
  belongs_to :recordable, :polymorphic => true
11
- belongs_to :modifier, :polymorphic => true
12
- serialize :data, :coder => JSON
11
+ belongs_to :modifier, :polymorphic => true, :optional => true
12
+ serialize(:data, :coder => JSON)
13
13
 
14
14
  end
15
15
  end
@@ -1,3 +1,3 @@
1
1
  module ImmosquareActiveRecordChangeTracker
2
- VERSION = "0.1.4".freeze
2
+ VERSION = "0.1.5".freeze
3
3
  end
@@ -10,10 +10,12 @@ module ImmosquareActiveRecordChangeTracker
10
10
 
11
11
  module ClassMethods
12
12
  ##============================================================##
13
- ## Can be improved with other gems like paranoia
13
+ ## True si le modèle hôte utilise paranoia (acts_as_paranoid).
14
+ ## La gem paranoia est optionnelle : si elle n'est pas chargée,
15
+ ## paranoid? n'existe pas — d'où le respond_to?.
14
16
  ##============================================================##
15
- def kept_in_db
16
- paranoid?
17
+ def kept_in_db?
18
+ respond_to?(:paranoid?) && paranoid?
17
19
  end
18
20
 
19
21
  def track_active_record_changes(options = {}, &modifier_block)
@@ -31,11 +33,11 @@ module ImmosquareActiveRecordChangeTracker
31
33
  }
32
34
 
33
35
  ##============================================================##
34
- ## Ajouter :dependent => :destroy si acts_as_paranoid n'est pas utilisé
35
- ## on se base sur paranoia_column car acts_as_paranoid répond true
36
- ## sur tous les modèles du temps que la gem est incluse
36
+ ## Ajouter :dependent => :destroy si acts_as_paranoid n'est pas utilisé.
37
+ ## Avec paranoia on garde l'historique au soft-delete et on le
38
+ ## nettoie via after_real_destroy.
37
39
  ##============================================================##
38
- association_options[:dependent] = :destroy if !kept_in_db
40
+ association_options[:dependent] = :destroy if !kept_in_db?
39
41
 
40
42
  ##============================================================##
41
43
  ## Ajout de l'association has_many :history_records
@@ -58,7 +60,7 @@ module ImmosquareActiveRecordChangeTracker
58
60
  ##============================================================##
59
61
  after_save(:save_change_history)
60
62
  after_destroy(:delete_change_history)
61
- after_real_destroy(:delete_all_change_histories) if paranoid?
63
+ after_real_destroy(:delete_all_change_histories) if kept_in_db?
62
64
  end
63
65
  end
64
66
 
@@ -74,20 +76,31 @@ module ImmosquareActiveRecordChangeTracker
74
76
  ## Stocker les changements après un create ou save ou update
75
77
  ##============================================================##
76
78
  def save_change_history
77
- history_options = self.class.history_options
79
+ options = self.class.history_options
78
80
 
79
81
  ##============================================================##
80
82
  ## Récupérer les champs à observer
81
83
  ##============================================================##
82
84
  changes_to_save =
83
- if history_options[:only].present?
84
- previous_changes.slice(*history_options[:only].map(&:to_s))
85
+ if options[:only].present?
86
+ previous_changes.slice(*options[:only].map(&:to_s))
85
87
  else
86
- excluded_fields = history_options[:except] || []
88
+ excluded_fields = options[:except] || []
87
89
  excluded_fields += [:created_at, :updated_at]
88
90
  previous_changes.except(*excluded_fields.uniq.map(&:to_s))
89
91
  end
90
92
 
93
+ ##============================================================##
94
+ ## On regarde si jamais ce que l'on essaye de sauvegarder contient
95
+ ## des valeurs identiques. Doit s'exécuter AVANT le merge Globalize :
96
+ ## les entrées de traduction sont des hash {locale => diff} qui ne
97
+ ## ressemblent pas à un [old, new] et casseraient l'indexation.
98
+ ## ex: quand on met true dans un integer, rails le convertit
99
+ ## automatiquement en 1 si le champ était déjà en bdd
100
+ ## -> {"cellar"=>[1, 1]} ou {"cellar"=>[0, 0]}
101
+ ##============================================================##
102
+ changes_to_save = changes_to_save.reject {|_k, change_array| change_array[0] == change_array[1] }
103
+
91
104
  ##============================================================##
92
105
  ## Gestion de Globalize
93
106
  ##============================================================##
@@ -115,42 +128,12 @@ module ImmosquareActiveRecordChangeTracker
115
128
  changes_to_save.merge!(globalize_changes)
116
129
  end
117
130
 
118
-
119
- ##============================================================##
120
- ## On regarde si jamais ce que l'on essaye de sauvegarder contient
121
- ## des valeurs identiques.
122
- ## ex: quand on met true dans un integer, rails le convertit
123
- ## automatiquement en 1 si le champ était déjà en bdd
124
- ## -> {"cellar"=>[1, 1]} ou {"cellar"=>[0, 0]}
125
- ##============================================================##
126
- changes_to_save = changes_to_save.reject {|_k, change_array| change_array[0] == change_array[1] }
127
-
128
131
  ##============================================================##
129
132
  ## Si aucun changement à sauvegarder, on sort
130
133
  ##============================================================##
131
134
  return if changes_to_save.none?
132
135
 
133
-
134
- ##============================================================##
135
- ## Récupération du modificateur en exécutant le bloc s'il est défini
136
- ##============================================================##
137
- modifier = history_options[:modifier_block]&.call
138
-
139
- ##============================================================##
140
- ## Gestion de l'événement (create ou update)
141
- ##============================================================##
142
- event = previously_new_record? ? "create" : "update"
143
-
144
- ##============================================================##
145
- ## On crée un enregistrement dans la table d'historique
146
- ##============================================================##
147
- ImmosquareActiveRecordChangeTracker::HistoryRecord.create!(
148
- :recordable => self,
149
- :modifier => modifier,
150
- :data => changes_to_save,
151
- :event => event,
152
- :created_at => DateTime.now
153
- )
136
+ write_history_record(:event => previously_new_record? ? "create" : "update", :data => changes_to_save)
154
137
  end
155
138
 
156
139
  ##============================================================##
@@ -159,22 +142,23 @@ module ImmosquareActiveRecordChangeTracker
159
142
  ## de suppression
160
143
  ##============================================================##
161
144
  def delete_change_history
162
- return if !self.class.kept_in_db
145
+ return if !self.class.kept_in_db?
163
146
 
164
- ##============================================================##
165
- ## Récupéreration du modificateur en exécutant le bloc s'il est défini
166
- ##============================================================##
167
- modifier = history_options[:modifier_block]&.call
147
+ write_history_record(:event => "destroy", :data => nil)
148
+ end
168
149
 
169
- ##============================================================##
170
- ## On crée un enregistrement dans la table d'historique
171
- ##============================================================##
150
+ ##============================================================##
151
+ ## Écrit une entrée dans la table d'historique. Le modifier est
152
+ ## résolu à la volée via le bloc passé à track_active_record_changes
153
+ ## (souvent un Current.user/admin).
154
+ ##============================================================##
155
+ def write_history_record(event:, data:)
172
156
  ImmosquareActiveRecordChangeTracker::HistoryRecord.create!(
173
157
  :recordable => self,
174
- :modifier => modifier,
175
- :data => nil,
176
- :event => "destroy",
177
- :created_at => DateTime.now
158
+ :modifier => self.class.history_options[:modifier_block]&.call,
159
+ :data => data,
160
+ :event => event,
161
+ :created_at => Time.current
178
162
  )
179
163
  end
180
164
  end
metadata CHANGED
@@ -1,15 +1,42 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: immosquare-active-record-change-tracker
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - immosquare
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2024-12-05 00:00:00.000000000 Z
12
- dependencies: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: activerecord
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: '6.1'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - ">="
24
+ - !ruby/object:Gem::Version
25
+ version: '6.1'
26
+ - !ruby/object:Gem::Dependency
27
+ name: railties
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: '6.1'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '6.1'
13
40
  description: A gem to track changes on ActiveRecord models
14
41
  email:
15
42
  - jules@immosquare.com
@@ -27,7 +54,6 @@ homepage: https://github.com/immosquare/immosquare-active-record-change-tracker
27
54
  licenses:
28
55
  - MIT
29
56
  metadata: {}
30
- post_install_message:
31
57
  rdoc_options: []
32
58
  require_paths:
33
59
  - lib
@@ -35,15 +61,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
35
61
  requirements:
36
62
  - - ">="
37
63
  - !ruby/object:Gem::Version
38
- version: 2.7.2
64
+ version: 3.2.6
39
65
  required_rubygems_version: !ruby/object:Gem::Requirement
40
66
  requirements:
41
67
  - - ">="
42
68
  - !ruby/object:Gem::Version
43
69
  version: '0'
44
70
  requirements: []
45
- rubygems_version: 3.5.22
46
- signing_key:
71
+ rubygems_version: 4.0.10
47
72
  specification_version: 4
48
73
  summary: ActiveRecord Change Tracker
49
74
  test_files: []