sequel-auditer 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/README.md +0 -8
- data/lib/sequel/auditer/version.rb +1 -1
- data/lib/sequel/plugins/auditer.rb +37 -58
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6860ac0c5865b177eac491a277880e87fe783ed4537be357de32a0d1f477f604
|
4
|
+
data.tar.gz: 2dd9b761c2210f6b9eb135f6556aadc570bfa3f1f02671a1affb0a6c9d186da9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c5e5172bcb8f2f75192065c72559095308373c04cd92369e2c1881db19bce86fec84554d4dac9f250f81c3c87790e3a777f636f8be36f23266d3c4049c81a746
|
7
|
+
data.tar.gz: 50f98657d457799fae402bf92ecfd7beba7b1b109448d993b412dd0f7095886d7c7e345a10f381c1562e8e520cf09191941f370aa45dc9df5e34db0db1aa26f8
|
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -7,14 +7,6 @@ and when the change was made.
|
|
7
7
|
This plugin provides model auditing (a.k.a: record versioning) for DB scenarios when DB triggers
|
8
8
|
are not possible. (ie: on a web app on Heroku).
|
9
9
|
|
10
|
-
|
11
|
-
|
12
|
-
## Disclaimer
|
13
|
-
|
14
|
-
This is still **work-in-progress**, and therefore **NOT production ready**, so **use with care**
|
15
|
-
and test thoroughly before depending upon this gem for mission-critical stuff!
|
16
|
-
You have been warned! No warranties and guarantees expressed or implied!
|
17
|
-
|
18
10
|
<br>
|
19
11
|
|
20
12
|
----
|
@@ -2,7 +2,7 @@ require_relative '../auditer'
|
|
2
2
|
|
3
3
|
class AuditLog < Sequel::Model
|
4
4
|
# handle versioning of audited records
|
5
|
-
plugin :list, field: :version, scope: [
|
5
|
+
plugin :list, field: :version, scope: %i[associated_type associated_id]
|
6
6
|
plugin :timestamps
|
7
7
|
plugin :polymorphic
|
8
8
|
|
@@ -15,12 +15,12 @@ class AuditLog < Sequel::Model
|
|
15
15
|
if u = audit_user
|
16
16
|
self.modifier = u
|
17
17
|
end
|
18
|
-
|
19
|
-
|
20
|
-
|
18
|
+
|
19
|
+
# grab any additional info if any
|
20
|
+
if i = audit_additional_info
|
21
21
|
self.additional_info = i
|
22
|
-
|
23
|
-
|
22
|
+
end
|
23
|
+
|
24
24
|
super
|
25
25
|
end
|
26
26
|
|
@@ -32,30 +32,27 @@ class AuditLog < Sequel::Model
|
|
32
32
|
# # NOTE! this allows overriding the default value on a per audited model
|
33
33
|
def audit_user
|
34
34
|
user = ::Sequel::Auditer::Railtie.user
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
35
|
+
|
36
|
+
m = Kernel.const_get(associated_type)
|
37
|
+
u = m.send(m.auditer_current_user_method) || send(m.auditer_current_user_method)
|
38
|
+
return u unless u.nil?
|
39
|
+
return user if u.nil? && !user.nil?
|
40
|
+
|
41
|
+
nil
|
42
|
+
rescue StandardError
|
43
|
+
nil
|
43
44
|
end
|
44
|
-
|
45
|
+
|
45
46
|
def audit_additional_info
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
nil
|
51
|
-
end
|
47
|
+
m = Kernel.const_get(associated_type)
|
48
|
+
m.send(m.auditer_additional_info_method) || send(m. auditer_additional_info_method)
|
49
|
+
rescue StandardError
|
50
|
+
nil
|
52
51
|
end
|
53
|
-
|
54
52
|
end
|
55
53
|
|
56
54
|
module Sequel
|
57
55
|
module Plugins
|
58
|
-
|
59
56
|
# Given a Post model with these fields:
|
60
57
|
# [:id, :category_id, :title, :body, :author_id, :created_at, :updated_at]
|
61
58
|
#
|
@@ -86,7 +83,6 @@ module Sequel
|
|
86
83
|
#
|
87
84
|
#
|
88
85
|
module Auditer
|
89
|
-
|
90
86
|
# called when
|
91
87
|
def self.configure(model, opts = {})
|
92
88
|
model.instance_eval do
|
@@ -107,12 +103,7 @@ module Sequel
|
|
107
103
|
only = opts.fetch(:only, [])
|
108
104
|
except = opts.fetch(:except, [])
|
109
105
|
|
110
|
-
|
111
|
-
# we should only track the provided column
|
112
|
-
included_columns = [only].flatten
|
113
|
-
# subtract the 'only' columns from all columns to get excluded_columns
|
114
|
-
excluded_columns = columns - included_columns
|
115
|
-
else # except:
|
106
|
+
if only.empty? # except:
|
116
107
|
# all columns minus any excepted columns and default ignored columns
|
117
108
|
included_columns = [
|
118
109
|
[columns - [except].flatten].flatten - @auditer_default_ignored_columns
|
@@ -121,6 +112,11 @@ module Sequel
|
|
121
112
|
# except_columns = except.empty? ? [] : [except].flatten
|
122
113
|
excluded_columns = [columns - included_columns].flatten.uniq
|
123
114
|
# excluded_columns = [columns - [except_columns, included_columns].flatten].flatten.uniq
|
115
|
+
else
|
116
|
+
# we should only track the provided column
|
117
|
+
included_columns = [only].flatten
|
118
|
+
# subtract the 'only' columns from all columns to get excluded_columns
|
119
|
+
excluded_columns = columns - included_columns
|
124
120
|
end
|
125
121
|
|
126
122
|
@auditer_included_columns = included_columns
|
@@ -132,15 +128,10 @@ module Sequel
|
|
132
128
|
class: audit_model_name,
|
133
129
|
as: 'associated'
|
134
130
|
)
|
135
|
-
|
136
131
|
end
|
137
|
-
|
138
|
-
|
139
132
|
end
|
140
133
|
|
141
|
-
#
|
142
134
|
module ClassMethods
|
143
|
-
|
144
135
|
attr_accessor :auditer_default_ignored_columns, :auditer_current_user_method, :auditer_additional_info_method
|
145
136
|
# The holder of ignored columns
|
146
137
|
attr_reader :auditer_ignored_columns
|
@@ -149,15 +140,13 @@ module Sequel
|
|
149
140
|
|
150
141
|
attr_accessor :auditer_reference_method
|
151
142
|
|
152
|
-
|
153
143
|
Plugins.inherited_instance_variables(self,
|
154
144
|
:@auditer_default_ignored_columns => nil,
|
155
145
|
:@auditer_current_user_method => nil,
|
156
146
|
:@auditer_additional_info_method => nil,
|
157
147
|
:@auditer_included_columns => nil,
|
158
148
|
:@auditer_ignored_columns => nil,
|
159
|
-
:@auditer_reference_method => nil
|
160
|
-
)
|
149
|
+
:@auditer_reference_method => nil)
|
161
150
|
|
162
151
|
def non_audited_columns
|
163
152
|
columns - auditer_columns
|
@@ -202,10 +191,8 @@ module Sequel
|
|
202
191
|
audit_model.where(opts.merge(associated_type: name.to_s)).order(:version).all
|
203
192
|
end
|
204
193
|
|
205
|
-
|
206
194
|
private
|
207
195
|
|
208
|
-
|
209
196
|
def audit_model
|
210
197
|
const_get(audit_model_name)
|
211
198
|
end
|
@@ -223,11 +210,7 @@ module Sequel
|
|
223
210
|
end
|
224
211
|
|
225
212
|
def set_user_method(opts)
|
226
|
-
|
227
|
-
@auditer_current_user_method = opts[:user_method]
|
228
|
-
else
|
229
|
-
@auditer_current_user_method = ::Sequel::Auditer.auditer_current_user_method
|
230
|
-
end
|
213
|
+
@auditer_current_user_method = opts[:user_method] || ::Sequel::Auditer.auditer_current_user_method
|
231
214
|
end
|
232
215
|
|
233
216
|
def set_additional_info_method(opts)
|
@@ -243,13 +226,9 @@ module Sequel
|
|
243
226
|
@auditer_reference_method = opts[:reference_method]
|
244
227
|
end
|
245
228
|
end
|
246
|
-
|
247
229
|
end
|
248
230
|
|
249
|
-
|
250
|
-
#
|
251
231
|
module InstanceMethods
|
252
|
-
|
253
232
|
# Returns who put the post into its current state.
|
254
233
|
#
|
255
234
|
# post.blame # => 'joeblogs'
|
@@ -262,7 +241,7 @@ module Sequel
|
|
262
241
|
v = versions.last unless versions.empty?
|
263
242
|
v ? v.modifier : 'not audited'
|
264
243
|
end
|
265
|
-
|
244
|
+
alias last_audited_by blame
|
266
245
|
|
267
246
|
# Returns who put the post into its current state.
|
268
247
|
#
|
@@ -276,19 +255,19 @@ module Sequel
|
|
276
255
|
v = versions.last unless versions.empty?
|
277
256
|
v ? v.created_at : 'not audited'
|
278
257
|
end
|
279
|
-
|
258
|
+
alias last_audited_on last_audited_at
|
280
259
|
|
281
260
|
private
|
282
261
|
|
283
262
|
# extract audited values only
|
284
263
|
def auditer_values(event)
|
285
264
|
vals = case event
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
265
|
+
when Sequel::Auditer::CREATE
|
266
|
+
values
|
267
|
+
when Sequel::Auditer::UPDATE
|
268
|
+
(column_changes.empty? ? previous_changes : column_changes)
|
269
|
+
when Sequel::Auditer::DESTROY
|
270
|
+
values
|
292
271
|
end
|
293
272
|
vals.except(*model.auditer_default_ignored_columns)
|
294
273
|
end
|
@@ -304,7 +283,7 @@ module Sequel
|
|
304
283
|
end
|
305
284
|
|
306
285
|
### CALLBACKS ###
|
307
|
-
|
286
|
+
|
308
287
|
def after_create
|
309
288
|
super
|
310
289
|
add_audited(Sequel::Auditer::CREATE)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sequel-auditer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kematzy
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: exe
|
13
13
|
cert_chain: []
|
14
|
-
date: 2018-
|
14
|
+
date: 2018-12-25 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: sequel
|