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:
|
|
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
|
##============================================================##
|
|
@@ -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
|
-
|
|
155
|
-
##============================================================##
|
|
156
|
-
modifier = history_options[:modifier_block]&.call
|
|
147
|
+
write_history_record(:event => "destroy", :data => nil)
|
|
148
|
+
end
|
|
157
149
|
|
|
158
|
-
|
|
159
|
-
|
|
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 =>
|
|
164
|
-
:data =>
|
|
165
|
-
:event =>
|
|
166
|
-
:created_at =>
|
|
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.
|
|
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: []
|