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:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: c45fff508dbb3ba604cd8f4edb7ed21011adf6eacf2ce3c31c0037bb7cbaf6a5
|
|
4
|
+
data.tar.gz: e03e4dbd003973dc0899f93649433f2d8dde8ada78e1b1ffb087e52578642947
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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
|
|
11
|
+
belongs_to :modifier, :polymorphic => true, :optional => true
|
|
12
|
+
serialize(:data, :coder => JSON)
|
|
13
13
|
|
|
14
14
|
end
|
|
15
15
|
end
|
|
@@ -10,10 +10,12 @@ module ImmosquareActiveRecordChangeTracker
|
|
|
10
10
|
|
|
11
11
|
module ClassMethods
|
|
12
12
|
##============================================================##
|
|
13
|
-
##
|
|
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
|
|
35
|
-
## on
|
|
36
|
-
##
|
|
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
|
|
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
|
-
|
|
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
|
|
84
|
-
previous_changes.slice(*
|
|
85
|
+
if options[:only].present?
|
|
86
|
+
previous_changes.slice(*options[:only].map(&:to_s))
|
|
85
87
|
else
|
|
86
|
-
excluded_fields =
|
|
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
|
-
|
|
166
|
-
##============================================================##
|
|
167
|
-
modifier = history_options[:modifier_block]&.call
|
|
147
|
+
write_history_record(:event => "destroy", :data => nil)
|
|
148
|
+
end
|
|
168
149
|
|
|
169
|
-
|
|
170
|
-
|
|
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 =>
|
|
175
|
-
:data =>
|
|
176
|
-
:event =>
|
|
177
|
-
:created_at =>
|
|
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
|
+
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:
|
|
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.
|
|
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:
|
|
46
|
-
signing_key:
|
|
71
|
+
rubygems_version: 4.0.10
|
|
47
72
|
specification_version: 4
|
|
48
73
|
summary: ActiveRecord Change Tracker
|
|
49
74
|
test_files: []
|