immosquare-active-record-change-tracker 0.1.3 → 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: 5650120d8f436785ef6f502ee25c0aa62178f0ce17971abf2b094c8538812685
4
- data.tar.gz: 423402a86f5e8934f620de94d8544e8f695057805d05b30c2415a5f3009166c8
3
+ metadata.gz: c45fff508dbb3ba604cd8f4edb7ed21011adf6eacf2ce3c31c0037bb7cbaf6a5
4
+ data.tar.gz: e03e4dbd003973dc0899f93649433f2d8dde8ada78e1b1ffb087e52578642947
5
5
  SHA512:
6
- metadata.gz: 9a10fa0b1d4312e9969ae3eb15ba36673b4e55cc773ac600453dd720d0699cb789109118a3da849255e740b81da55f6a8c6673c6f06f9de2c510b9f1b5cbd822
7
- data.tar.gz: 2f6cd9da9e195174f20bfb12e4f1b43940b0399b2d00f500b665794948bd81e4dd8e32e6fd648c4ab532e2a986fdae2a6046ca5ed462d9ac26cdfe9e92faf8a8
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.3".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
  ##============================================================##
@@ -120,26 +133,7 @@ module ImmosquareActiveRecordChangeTracker
120
133
  ##============================================================##
121
134
  return if changes_to_save.none?
122
135
 
123
- ##============================================================##
124
- ## Récupération du modificateur en exécutant le bloc s'il est défini
125
- ##============================================================##
126
- modifier = history_options[:modifier_block]&.call
127
-
128
- ##============================================================##
129
- ## Gestion de l'événement (create ou update)
130
- ##============================================================##
131
- event = previously_new_record? ? "create" : "update"
132
-
133
- ##============================================================##
134
- ## On crée un enregistrement dans la table d'historique
135
- ##============================================================##
136
- ImmosquareActiveRecordChangeTracker::HistoryRecord.create!(
137
- :recordable => self,
138
- :modifier => modifier,
139
- :data => changes_to_save,
140
- :event => event,
141
- :created_at => DateTime.now
142
- )
136
+ write_history_record(:event => previously_new_record? ? "create" : "update", :data => changes_to_save)
143
137
  end
144
138
 
145
139
  ##============================================================##
@@ -148,22 +142,23 @@ module ImmosquareActiveRecordChangeTracker
148
142
  ## de suppression
149
143
  ##============================================================##
150
144
  def delete_change_history
151
- return if !self.class.kept_in_db
145
+ return if !self.class.kept_in_db?
152
146
 
153
- ##============================================================##
154
- ## Récupéreration du modificateur en exécutant le bloc s'il est défini
155
- ##============================================================##
156
- modifier = history_options[:modifier_block]&.call
147
+ write_history_record(:event => "destroy", :data => nil)
148
+ end
157
149
 
158
- ##============================================================##
159
- ## On crée un enregistrement dans la table d'historique
160
- ##============================================================##
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:)
161
156
  ImmosquareActiveRecordChangeTracker::HistoryRecord.create!(
162
157
  :recordable => self,
163
- :modifier => modifier,
164
- :data => nil,
165
- :event => "destroy",
166
- :created_at => DateTime.now
158
+ :modifier => self.class.history_options[:modifier_block]&.call,
159
+ :data => data,
160
+ :event => event,
161
+ :created_at => Time.current
167
162
  )
168
163
  end
169
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.3
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-10-15 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.21
46
- signing_key:
71
+ rubygems_version: 4.0.10
47
72
  specification_version: 4
48
73
  summary: ActiveRecord Change Tracker
49
74
  test_files: []