pg_audit_log 0.6.5 → 0.6.6
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 +4 -4
- data/.gitignore +9 -10
- data/.travis.yml +1 -0
- data/CHANGELOG.md +5 -0
- data/README.md +1 -1
- data/lib/generators/pg_audit_log/install_generator.rb +1 -1
- data/lib/pg_audit_log/version.rb +1 -1
- data/pg_audit_log.gemspec +2 -2
- data/spec/configuration_spec.rb +1 -1
- data/spec/function_spec.rb +10 -10
- data/spec/model_spec.rb +3 -3
- data/spec/pg_audit_log_spec.rb +159 -55
- data/spec/triggers_spec.rb +26 -26
- metadata +11 -12
- data/.rvmrc +0 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7ec491dc91a88e95b3a62a99119d71b9880b1633
|
4
|
+
data.tar.gz: 5eb489c343b5d17208ae25a3f00ecc418d3aeecd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 83c89e0684320a261368562fbeb03167adc617814f858c59747787c3e775a57ea2d3783c8771561ead90692b3a8a7acaf30a5a3fe66ff5841aa7815424cc01e4
|
7
|
+
data.tar.gz: 5f29260cda979560c08e8a2cd76474363595daba8f1821f79c6148f555a5f839fd56c8b3badf7f86655376c0901cfb5860d9134760eeae5422144e5a2a4ba216
|
data/.gitignore
CHANGED
@@ -1,10 +1,9 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
tags
|
1
|
+
/.bundle/
|
2
|
+
/.yardoc
|
3
|
+
/Gemfile.lock
|
4
|
+
/_yardoc/
|
5
|
+
/coverage/
|
6
|
+
/doc/
|
7
|
+
/pkg/
|
8
|
+
/spec/reports/
|
9
|
+
/tmp/
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# pg_audit_log
|
2
2
|
|
3
|
-
[](https://travis-ci.org/Casecommons/pg_audit_log)
|
4
4
|
[](https://codeclimate.com/github/Casecommons/pg_audit_log)
|
5
5
|
[](https://rubygems.org/gems/pg_audit_log)
|
6
6
|
|
data/lib/pg_audit_log/version.rb
CHANGED
data/pg_audit_log.gemspec
CHANGED
@@ -19,9 +19,9 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
20
20
|
spec.require_paths = ['lib']
|
21
21
|
|
22
|
-
spec.add_dependency 'rails', '>= 3.2', '
|
22
|
+
spec.add_dependency 'rails', '>= 3.2', '< 4.3'
|
23
23
|
spec.add_dependency 'pg', '>= 0.9.0'
|
24
|
-
spec.add_development_dependency 'rspec', '
|
24
|
+
spec.add_development_dependency 'rspec', '~> 3.0'
|
25
25
|
spec.add_development_dependency 'rspec-rails'
|
26
26
|
spec.add_development_dependency 'with_model', '>= 0.1.3'
|
27
27
|
end
|
data/spec/configuration_spec.rb
CHANGED
data/spec/function_spec.rb
CHANGED
@@ -8,7 +8,7 @@ describe PgAuditLog::Function do
|
|
8
8
|
PgAuditLog::Function.uninstall
|
9
9
|
end
|
10
10
|
|
11
|
-
it {
|
11
|
+
it { is_expected.to be_falsey }
|
12
12
|
end
|
13
13
|
|
14
14
|
context "when it is" do
|
@@ -16,7 +16,7 @@ describe PgAuditLog::Function do
|
|
16
16
|
PgAuditLog::Function.install
|
17
17
|
end
|
18
18
|
|
19
|
-
it {
|
19
|
+
it { is_expected.to be_truthy }
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
@@ -26,27 +26,27 @@ describe PgAuditLog::Function do
|
|
26
26
|
|
27
27
|
context "new style" do
|
28
28
|
it "escapes the email" do
|
29
|
-
subject.
|
29
|
+
expect(subject).not_to match('SET')
|
30
30
|
|
31
|
-
subject.
|
32
|
-
subject.
|
31
|
+
expect(subject).to match('FUNCTION')
|
32
|
+
expect(subject).to match("'o''connell@fred.com'::varchar")
|
33
33
|
end
|
34
34
|
end
|
35
35
|
|
36
36
|
context "old style" do
|
37
37
|
before do
|
38
38
|
Rails = double
|
39
|
-
Rails.
|
39
|
+
allow(Rails).to receive_message_chain(:configuration, :pg_audit_log_old_style_user_id).and_return(true)
|
40
40
|
end
|
41
41
|
|
42
42
|
after { Object.send(:remove_const, :Rails) }
|
43
43
|
|
44
44
|
it "escapes the email" do
|
45
|
-
subject.
|
46
|
-
subject.
|
45
|
+
expect(subject).to match('SET')
|
46
|
+
expect(subject).to match("'o''connell@fred.com'")
|
47
47
|
|
48
|
-
subject.
|
49
|
-
subject.
|
48
|
+
expect(subject).not_to match('FUNCTION')
|
49
|
+
expect(subject).not_to match("'o''connell@fred.com'::varchar")
|
50
50
|
end
|
51
51
|
end
|
52
52
|
end
|
data/spec/model_spec.rb
CHANGED
@@ -5,19 +5,19 @@ describe PgAuditLog::Entry do
|
|
5
5
|
|
6
6
|
describe ".delete" do
|
7
7
|
it "blows up because deleting audit logs is not allowed" do
|
8
|
-
|
8
|
+
expect { PgAuditLog::Entry.delete(subject.id) }.to raise_error(PgAuditLog::Entry::CannotDeleteError)
|
9
9
|
end
|
10
10
|
end
|
11
11
|
|
12
12
|
describe ".delete_all" do
|
13
13
|
it "blows up because deleting audit logs is not allowed" do
|
14
|
-
|
14
|
+
expect { PgAuditLog::Entry.delete_all }.to raise_error(PgAuditLog::Entry::CannotDeleteError)
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
18
18
|
describe "#destroy" do
|
19
19
|
it "blows up because deleting audit logs is not allowed" do
|
20
|
-
|
20
|
+
expect { subject.destroy }.to raise_error(PgAuditLog::Entry::CannotDeleteError)
|
21
21
|
end
|
22
22
|
end
|
23
23
|
end
|
data/spec/pg_audit_log_spec.rb
CHANGED
@@ -42,12 +42,32 @@ describe PgAuditLog do
|
|
42
42
|
AuditedModel.create!(attributes)
|
43
43
|
end
|
44
44
|
|
45
|
-
it {
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
45
|
+
it { is_expected.to be }
|
46
|
+
|
47
|
+
describe '#occurred_at' do
|
48
|
+
subject { super().occurred_at }
|
49
|
+
it { is_expected.to be }
|
50
|
+
end
|
51
|
+
|
52
|
+
describe '#table_name' do
|
53
|
+
subject { super().table_name }
|
54
|
+
it { is_expected.to eq(AuditedModel.table_name) }
|
55
|
+
end
|
56
|
+
|
57
|
+
describe '#field_name' do
|
58
|
+
subject { super().field_name }
|
59
|
+
it { is_expected.to eq('str') }
|
60
|
+
end
|
61
|
+
|
62
|
+
describe '#primary_key' do
|
63
|
+
subject { super().primary_key }
|
64
|
+
it { is_expected.to eq(AuditedModel.last.id.to_s) }
|
65
|
+
end
|
66
|
+
|
67
|
+
describe '#operation' do
|
68
|
+
subject { super().operation }
|
69
|
+
it { is_expected.to eq('INSERT') }
|
70
|
+
end
|
51
71
|
end
|
52
72
|
|
53
73
|
context "when a user is present, having just been changed" do
|
@@ -57,15 +77,29 @@ describe PgAuditLog do
|
|
57
77
|
ActiveRecord::Persistence.instance_method(:save).bind(record).call # call save without transaction
|
58
78
|
end
|
59
79
|
|
60
|
-
|
61
|
-
|
80
|
+
describe '#user_id' do
|
81
|
+
subject { super().user_id }
|
82
|
+
it { is_expected.to eq(1) }
|
83
|
+
end
|
84
|
+
|
85
|
+
describe '#user_unique_name' do
|
86
|
+
subject { super().user_unique_name }
|
87
|
+
it { is_expected.to eq('my current user') }
|
88
|
+
end
|
62
89
|
end
|
63
90
|
|
64
91
|
context "when no user is present" do
|
65
92
|
before { AuditedModel.create!(attributes) }
|
66
93
|
|
67
|
-
|
68
|
-
|
94
|
+
describe '#user_id' do
|
95
|
+
subject { super().user_id }
|
96
|
+
it { is_expected.to eq(-1) }
|
97
|
+
end
|
98
|
+
|
99
|
+
describe '#user_unique_name' do
|
100
|
+
subject { super().user_unique_name }
|
101
|
+
it { is_expected.to eq('UNKNOWN') }
|
102
|
+
end
|
69
103
|
end
|
70
104
|
|
71
105
|
it "captures all new values for all fields" do
|
@@ -74,11 +108,11 @@ describe PgAuditLog do
|
|
74
108
|
attributes.each do |field_name, value|
|
75
109
|
entry = PgAuditLog::Entry.where(:field_name => field_name).last
|
76
110
|
if field_name == :dt
|
77
|
-
entry.field_value_new.
|
111
|
+
expect(entry.field_value_new).to eq(value.strftime("%Y-%m-%d %H:%M:%S"))
|
78
112
|
else
|
79
|
-
entry.field_value_new.
|
113
|
+
expect(entry.field_value_new).to eq(value.to_s)
|
80
114
|
end
|
81
|
-
entry.field_value_old.
|
115
|
+
expect(entry.field_value_old).to be_nil
|
82
116
|
end
|
83
117
|
end
|
84
118
|
end
|
@@ -90,9 +124,17 @@ describe PgAuditLog do
|
|
90
124
|
|
91
125
|
subject { PgAuditLog::Entry.where(:field_name => 'str').last }
|
92
126
|
|
93
|
-
it {
|
94
|
-
|
95
|
-
|
127
|
+
it { is_expected.to be }
|
128
|
+
|
129
|
+
describe '#field_name' do
|
130
|
+
subject { super().field_name }
|
131
|
+
it { is_expected.to eq('str') }
|
132
|
+
end
|
133
|
+
|
134
|
+
describe '#primary_key' do
|
135
|
+
subject { super().primary_key }
|
136
|
+
it { is_expected.to be_nil }
|
137
|
+
end
|
96
138
|
end
|
97
139
|
end
|
98
140
|
|
@@ -111,17 +153,35 @@ describe PgAuditLog do
|
|
111
153
|
ActiveRecord::Persistence.instance_method(:save).bind(@model).call # call save without transaction
|
112
154
|
end
|
113
155
|
|
114
|
-
|
115
|
-
|
156
|
+
describe '#user_id' do
|
157
|
+
subject { super().user_id }
|
158
|
+
it { is_expected.to eq(1) }
|
159
|
+
end
|
160
|
+
|
161
|
+
describe '#user_unique_name' do
|
162
|
+
subject { super().user_unique_name }
|
163
|
+
it { is_expected.to eq('my current user') }
|
164
|
+
end
|
116
165
|
end
|
117
166
|
|
118
167
|
context "when going from a value to a another value" do
|
119
168
|
before { @model.update_attributes!(:str => 'bar') }
|
120
169
|
subject { PgAuditLog::Entry.where(:field_name => 'str').last }
|
121
170
|
|
122
|
-
|
123
|
-
|
124
|
-
|
171
|
+
describe '#operation' do
|
172
|
+
subject { super().operation }
|
173
|
+
it { is_expected.to eq('UPDATE') }
|
174
|
+
end
|
175
|
+
|
176
|
+
describe '#field_value_new' do
|
177
|
+
subject { super().field_value_new }
|
178
|
+
it { is_expected.to eq('bar') }
|
179
|
+
end
|
180
|
+
|
181
|
+
describe '#field_value_old' do
|
182
|
+
subject { super().field_value_old }
|
183
|
+
it { is_expected.to eq('foo') }
|
184
|
+
end
|
125
185
|
end
|
126
186
|
|
127
187
|
context "when going from nil to a value" do
|
@@ -129,23 +189,37 @@ describe PgAuditLog do
|
|
129
189
|
before { @model.update_attributes!(:txt => 'baz') }
|
130
190
|
subject { PgAuditLog::Entry.where(:field_name => 'txt').last }
|
131
191
|
|
132
|
-
|
133
|
-
|
192
|
+
describe '#field_value_new' do
|
193
|
+
subject { super().field_value_new }
|
194
|
+
it { is_expected.to eq('baz') }
|
195
|
+
end
|
196
|
+
|
197
|
+
describe '#field_value_old' do
|
198
|
+
subject { super().field_value_old }
|
199
|
+
it { is_expected.to be_nil }
|
200
|
+
end
|
134
201
|
end
|
135
202
|
|
136
203
|
context "when going from a value to nil" do
|
137
204
|
before { @model.update_attributes!(:str => nil) }
|
138
205
|
subject { PgAuditLog::Entry.where(:field_name => 'str').last }
|
139
206
|
|
140
|
-
|
141
|
-
|
207
|
+
describe '#field_value_new' do
|
208
|
+
subject { super().field_value_new }
|
209
|
+
it { is_expected.to be_nil }
|
210
|
+
end
|
211
|
+
|
212
|
+
describe '#field_value_old' do
|
213
|
+
subject { super().field_value_old }
|
214
|
+
it { is_expected.to eq('foo') }
|
215
|
+
end
|
142
216
|
end
|
143
217
|
|
144
218
|
context "when the value does not change" do
|
145
219
|
before { @model.update_attributes!(:str => 'foo') }
|
146
220
|
subject { PgAuditLog::Entry.where(:field_name => 'str', :operation => 'UPDATE').last }
|
147
221
|
|
148
|
-
it {
|
222
|
+
it { is_expected.not_to be }
|
149
223
|
end
|
150
224
|
|
151
225
|
context "when the value is nil and does not change" do
|
@@ -153,7 +227,7 @@ describe PgAuditLog do
|
|
153
227
|
before { @model.update_attributes!(:txt => nil) }
|
154
228
|
subject { PgAuditLog::Entry.where(:field_name => 'txt', :operation => 'UPDATE').last }
|
155
229
|
|
156
|
-
it {
|
230
|
+
it { is_expected.not_to be }
|
157
231
|
end
|
158
232
|
|
159
233
|
context "when the value is a boolean" do
|
@@ -161,8 +235,15 @@ describe PgAuditLog do
|
|
161
235
|
before { @model.update_attributes!(:bool => true) }
|
162
236
|
subject { PgAuditLog::Entry.where(:field_name => 'bool', :operation => 'UPDATE').last }
|
163
237
|
|
164
|
-
|
165
|
-
|
238
|
+
describe '#field_value_new' do
|
239
|
+
subject { super().field_value_new }
|
240
|
+
it { is_expected.to eq('true') }
|
241
|
+
end
|
242
|
+
|
243
|
+
describe '#field_value_old' do
|
244
|
+
subject { super().field_value_old }
|
245
|
+
it { is_expected.to be_nil }
|
246
|
+
end
|
166
247
|
end
|
167
248
|
|
168
249
|
context "going from false -> true" do
|
@@ -172,8 +253,15 @@ describe PgAuditLog do
|
|
172
253
|
end
|
173
254
|
subject { PgAuditLog::Entry.where(:field_name => 'bool', :operation => 'UPDATE').last }
|
174
255
|
|
175
|
-
|
176
|
-
|
256
|
+
describe '#field_value_new' do
|
257
|
+
subject { super().field_value_new }
|
258
|
+
it { is_expected.to eq('true') }
|
259
|
+
end
|
260
|
+
|
261
|
+
describe '#field_value_old' do
|
262
|
+
subject { super().field_value_old }
|
263
|
+
it { is_expected.to eq('false') }
|
264
|
+
end
|
177
265
|
end
|
178
266
|
|
179
267
|
context "going from true -> false" do
|
@@ -184,8 +272,15 @@ describe PgAuditLog do
|
|
184
272
|
end
|
185
273
|
subject { PgAuditLog::Entry.where(:field_name => 'bool', :operation => 'UPDATE').last }
|
186
274
|
|
187
|
-
|
188
|
-
|
275
|
+
describe '#field_value_new' do
|
276
|
+
subject { super().field_value_new }
|
277
|
+
it { is_expected.to eq('false') }
|
278
|
+
end
|
279
|
+
|
280
|
+
describe '#field_value_old' do
|
281
|
+
subject { super().field_value_old }
|
282
|
+
it { is_expected.to eq('true') }
|
283
|
+
end
|
189
284
|
end
|
190
285
|
end
|
191
286
|
end
|
@@ -198,7 +293,10 @@ describe PgAuditLog do
|
|
198
293
|
|
199
294
|
subject { PgAuditLog::Entry.where(:field_name => 'str').last }
|
200
295
|
|
201
|
-
|
296
|
+
describe '#primary_key' do
|
297
|
+
subject { super().primary_key }
|
298
|
+
it { is_expected.to be_nil }
|
299
|
+
end
|
202
300
|
end
|
203
301
|
end
|
204
302
|
|
@@ -211,17 +309,20 @@ describe PgAuditLog do
|
|
211
309
|
|
212
310
|
subject { PgAuditLog::Entry.where(:field_name => 'str').last }
|
213
311
|
|
214
|
-
|
312
|
+
describe '#operation' do
|
313
|
+
subject { super().operation }
|
314
|
+
it { is_expected.to eq('DELETE') }
|
315
|
+
end
|
215
316
|
|
216
317
|
it "captures all new values for all fields" do
|
217
318
|
attributes.each do |field_name, value|
|
218
319
|
entry = PgAuditLog::Entry.where(:field_name => field_name).last
|
219
320
|
if field_name == :dt
|
220
|
-
entry.field_value_old.
|
321
|
+
expect(entry.field_value_old).to eq(value.strftime('%Y-%m-%d %H:%M:%S'))
|
221
322
|
else
|
222
|
-
entry.field_value_old.
|
323
|
+
expect(entry.field_value_old).to eq(value.to_s)
|
223
324
|
end
|
224
|
-
entry.field_value_new.
|
325
|
+
expect(entry.field_value_new).to be_nil
|
225
326
|
end
|
226
327
|
end
|
227
328
|
end
|
@@ -241,7 +342,10 @@ describe PgAuditLog do
|
|
241
342
|
|
242
343
|
subject { PgAuditLog::Entry.where(:field_name => 'str').last }
|
243
344
|
|
244
|
-
|
345
|
+
describe '#primary_key' do
|
346
|
+
subject { super().primary_key }
|
347
|
+
it { is_expected.to be_nil }
|
348
|
+
end
|
245
349
|
end
|
246
350
|
end
|
247
351
|
|
@@ -271,9 +375,9 @@ describe PgAuditLog do
|
|
271
375
|
|
272
376
|
describe "when creating the table" do
|
273
377
|
it "should automatically create the trigger" do
|
274
|
-
PgAuditLog::Triggers.tables_with_triggers.
|
378
|
+
expect(PgAuditLog::Triggers.tables_with_triggers).not_to include('test_table')
|
275
379
|
connection.create_table('test_table')
|
276
|
-
PgAuditLog::Triggers.tables_with_triggers.
|
380
|
+
expect(PgAuditLog::Triggers.tables_with_triggers).to include('test_table')
|
277
381
|
end
|
278
382
|
end
|
279
383
|
|
@@ -281,7 +385,7 @@ describe PgAuditLog do
|
|
281
385
|
it "should automatically drop the trigger" do
|
282
386
|
connection.create_table('test_table')
|
283
387
|
connection.drop_table('test_table')
|
284
|
-
PgAuditLog::Triggers.tables_with_triggers.
|
388
|
+
expect(PgAuditLog::Triggers.tables_with_triggers).not_to include('test_table')
|
285
389
|
end
|
286
390
|
end
|
287
391
|
|
@@ -299,9 +403,9 @@ describe PgAuditLog do
|
|
299
403
|
connection.create_table('test_table')
|
300
404
|
connection.rename_table('test_table', new_table_name)
|
301
405
|
|
302
|
-
trigger_names.
|
303
|
-
trigger_names.
|
304
|
-
PgAuditLog::Triggers.tables_with_triggers.
|
406
|
+
expect(trigger_names).not_to include('audit_test_table')
|
407
|
+
expect(trigger_names).to include("audit_#{new_table_name}")
|
408
|
+
expect(PgAuditLog::Triggers.tables_with_triggers).to include(new_table_name)
|
305
409
|
|
306
410
|
connection.drop_table(new_table_name) rescue nil
|
307
411
|
end
|
@@ -313,9 +417,9 @@ describe PgAuditLog do
|
|
313
417
|
connection.create_table('ignored_table')
|
314
418
|
connection.rename_table('ignored_table', new_table_name)
|
315
419
|
|
316
|
-
trigger_names.
|
317
|
-
trigger_names.
|
318
|
-
PgAuditLog::Triggers.tables_with_triggers.
|
420
|
+
expect(trigger_names).not_to include('audit_ignored_table')
|
421
|
+
expect(trigger_names).not_to include("audit_#{new_table_name}")
|
422
|
+
expect(PgAuditLog::Triggers.tables_with_triggers).not_to include(new_table_name)
|
319
423
|
|
320
424
|
connection.drop_table(new_table_name) rescue nil
|
321
425
|
end
|
@@ -327,7 +431,7 @@ describe PgAuditLog do
|
|
327
431
|
context "when creating them" do
|
328
432
|
it "should be ignored" do
|
329
433
|
connection.create_table('some_temp_table', :temporary => true)
|
330
|
-
PgAuditLog::Triggers.tables_with_triggers.
|
434
|
+
expect(PgAuditLog::Triggers.tables_with_triggers).not_to include('some_temp_table')
|
331
435
|
connection.drop_table('some_temp_table')
|
332
436
|
end
|
333
437
|
end
|
@@ -336,7 +440,7 @@ describe PgAuditLog do
|
|
336
440
|
it "should be ignored" do
|
337
441
|
connection.create_table('some_temp_table', :temporary => true)
|
338
442
|
connection.drop_table('some_temp_table')
|
339
|
-
PgAuditLog::Triggers.tables_with_triggers.
|
443
|
+
expect(PgAuditLog::Triggers.tables_with_triggers).not_to include('some_temp_table')
|
340
444
|
end
|
341
445
|
end
|
342
446
|
end
|
@@ -349,7 +453,7 @@ describe PgAuditLog do
|
|
349
453
|
context "when creating a table" do
|
350
454
|
it "should install the function then enable the trigger on the table" do
|
351
455
|
connection.create_table('some_more_new_table')
|
352
|
-
PgAuditLog::Triggers.tables_with_triggers.
|
456
|
+
expect(PgAuditLog::Triggers.tables_with_triggers).to include('some_more_new_table')
|
353
457
|
connection.drop_table('some_more_new_table')
|
354
458
|
end
|
355
459
|
end
|
@@ -362,9 +466,9 @@ describe PgAuditLog do
|
|
362
466
|
|
363
467
|
context "when creating a table" do
|
364
468
|
it "should install the entry table then enable the trigger on the table" do
|
365
|
-
PgAuditLog::Entry.installed
|
469
|
+
expect(PgAuditLog::Entry.installed?).to be_falsey
|
366
470
|
connection.create_table('another_table')
|
367
|
-
PgAuditLog::Entry.installed
|
471
|
+
expect(PgAuditLog::Entry.installed?).to be_truthy
|
368
472
|
connection.drop_table('another_table')
|
369
473
|
end
|
370
474
|
end
|
@@ -375,7 +479,7 @@ describe PgAuditLog do
|
|
375
479
|
it "should not automatically create a trigger for it" do
|
376
480
|
PgAuditLog::IGNORED_TABLES << 'ignored_table'
|
377
481
|
connection.create_table('ignored_table')
|
378
|
-
PgAuditLog::Triggers.tables_with_triggers.
|
482
|
+
expect(PgAuditLog::Triggers.tables_with_triggers).not_to include('ignored_table')
|
379
483
|
connection.drop_table('ignored_table')
|
380
484
|
end
|
381
485
|
end
|
@@ -384,7 +488,7 @@ describe PgAuditLog do
|
|
384
488
|
it "should not automatically create a trigger for it" do
|
385
489
|
PgAuditLog::IGNORED_TABLES << /ignored_table/
|
386
490
|
connection.create_table('second_ignored_table')
|
387
|
-
PgAuditLog::Triggers.tables_with_triggers.
|
491
|
+
expect(PgAuditLog::Triggers.tables_with_triggers).not_to include('second_ignored_table')
|
388
492
|
connection.drop_table('second_ignored_table')
|
389
493
|
end
|
390
494
|
end
|
data/spec/triggers_spec.rb
CHANGED
@@ -28,23 +28,23 @@ describe PgAuditLog::Triggers do
|
|
28
28
|
PgAuditLog::IGNORED_TABLES << /ignore/
|
29
29
|
end
|
30
30
|
|
31
|
-
it {
|
32
|
-
it {
|
33
|
-
it {
|
34
|
-
it {
|
31
|
+
it { is_expected.to include(TableWithTriggers.table_name) }
|
32
|
+
it { is_expected.to include(TableWithoutTriggers.table_name) }
|
33
|
+
it { is_expected.not_to include(PgAuditLog::Entry.table_name) }
|
34
|
+
it { is_expected.not_to include(TableToIgnore.table_name) }
|
35
35
|
end
|
36
36
|
|
37
37
|
describe ".tables_with_triggers" do
|
38
38
|
it "should return an array of all tables that do have an audit trigger installed" do
|
39
|
-
PgAuditLog::Triggers.tables_with_triggers.
|
40
|
-
PgAuditLog::Triggers.tables_with_triggers.
|
39
|
+
expect(PgAuditLog::Triggers.tables_with_triggers).to include(TableWithTriggers.table_name)
|
40
|
+
expect(PgAuditLog::Triggers.tables_with_triggers).not_to include(TableWithoutTriggers.table_name)
|
41
41
|
end
|
42
42
|
end
|
43
43
|
|
44
44
|
describe ".tables_without_triggers" do
|
45
45
|
it "should return an array of all tables that do not have an audit trigger installed" do
|
46
|
-
PgAuditLog::Triggers.tables_without_triggers.
|
47
|
-
PgAuditLog::Triggers.tables_without_triggers.
|
46
|
+
expect(PgAuditLog::Triggers.tables_without_triggers).not_to include(TableWithTriggers.table_name)
|
47
|
+
expect(PgAuditLog::Triggers.tables_without_triggers).to include(TableWithoutTriggers.table_name)
|
48
48
|
end
|
49
49
|
end
|
50
50
|
|
@@ -55,17 +55,17 @@ describe PgAuditLog::Triggers do
|
|
55
55
|
|
56
56
|
describe ".install" do
|
57
57
|
it "should work" do
|
58
|
-
|
58
|
+
expect{
|
59
59
|
PgAuditLog::Triggers.install
|
60
|
-
}.
|
60
|
+
}.not_to raise_error
|
61
61
|
end
|
62
62
|
end
|
63
63
|
|
64
64
|
describe ".uninstall" do
|
65
65
|
it "should work" do
|
66
|
-
|
66
|
+
expect{
|
67
67
|
PgAuditLog::Triggers.uninstall
|
68
|
-
}.
|
68
|
+
}.not_to raise_error
|
69
69
|
end
|
70
70
|
end
|
71
71
|
|
@@ -74,24 +74,24 @@ describe PgAuditLog::Triggers do
|
|
74
74
|
context "when triggers are installed" do
|
75
75
|
describe ".install" do
|
76
76
|
it "should work" do
|
77
|
-
|
77
|
+
expect{
|
78
78
|
PgAuditLog::Triggers.install
|
79
|
-
}.
|
79
|
+
}.not_to raise_error
|
80
80
|
end
|
81
81
|
end
|
82
82
|
describe ".uninstall" do
|
83
83
|
it "should work" do
|
84
|
-
|
84
|
+
expect{
|
85
85
|
PgAuditLog::Triggers.uninstall
|
86
|
-
}.
|
86
|
+
}.not_to raise_error
|
87
87
|
end
|
88
88
|
end
|
89
89
|
|
90
90
|
describe ".enable" do
|
91
91
|
it "should not blow up" do
|
92
|
-
|
92
|
+
expect{
|
93
93
|
PgAuditLog::Triggers.enable
|
94
|
-
}.
|
94
|
+
}.not_to raise_error
|
95
95
|
end
|
96
96
|
|
97
97
|
it "should fire the audit" do
|
@@ -104,9 +104,9 @@ describe PgAuditLog::Triggers do
|
|
104
104
|
|
105
105
|
describe ".disable" do
|
106
106
|
it "should not blow up" do
|
107
|
-
|
107
|
+
expect{
|
108
108
|
PgAuditLog::Triggers.disable
|
109
|
-
}.
|
109
|
+
}.not_to raise_error
|
110
110
|
end
|
111
111
|
|
112
112
|
it "should not fire the audit" do
|
@@ -130,17 +130,17 @@ describe PgAuditLog::Triggers do
|
|
130
130
|
expect {
|
131
131
|
TableWithTriggers.create!
|
132
132
|
}.to change(PgAuditLog::Entry, :count)
|
133
|
-
PgAuditLog::Entry.last.user_id.
|
133
|
+
expect(PgAuditLog::Entry.last.user_id).to eq(-1)
|
134
134
|
end
|
135
135
|
end
|
136
136
|
|
137
137
|
describe ".create_for_table" do
|
138
138
|
context "for a table that already has a trigger" do
|
139
139
|
it "should not blow up" do
|
140
|
-
PgAuditLog::Triggers.tables_with_triggers.
|
141
|
-
|
140
|
+
expect(PgAuditLog::Triggers.tables_with_triggers).to include(TableWithTriggers.table_name)
|
141
|
+
expect{
|
142
142
|
PgAuditLog::Triggers.create_for_table(TableWithTriggers.table_name)
|
143
|
-
}.
|
143
|
+
}.not_to raise_error
|
144
144
|
end
|
145
145
|
end
|
146
146
|
end
|
@@ -149,9 +149,9 @@ describe PgAuditLog::Triggers do
|
|
149
149
|
context "for a table that has no trigger" do
|
150
150
|
it "should not blow up" do
|
151
151
|
PgAuditLog::Triggers.drop_for_table(TableWithTriggers.table_name)
|
152
|
-
|
152
|
+
expect{
|
153
153
|
PgAuditLog::Triggers.drop_for_table(TableWithTriggers.table_name)
|
154
|
-
}.
|
154
|
+
}.not_to raise_error
|
155
155
|
end
|
156
156
|
end
|
157
157
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pg_audit_log
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Case Commons, LLC
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-03-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -17,9 +17,9 @@ dependencies:
|
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '3.2'
|
20
|
-
- - "
|
20
|
+
- - "<"
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: '4.
|
22
|
+
version: '4.3'
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -27,9 +27,9 @@ dependencies:
|
|
27
27
|
- - ">="
|
28
28
|
- !ruby/object:Gem::Version
|
29
29
|
version: '3.2'
|
30
|
-
- - "
|
30
|
+
- - "<"
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version: '4.
|
32
|
+
version: '4.3'
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
34
|
name: pg
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
@@ -48,16 +48,16 @@ dependencies:
|
|
48
48
|
name: rspec
|
49
49
|
requirement: !ruby/object:Gem::Requirement
|
50
50
|
requirements:
|
51
|
-
- -
|
51
|
+
- - "~>"
|
52
52
|
- !ruby/object:Gem::Version
|
53
|
-
version:
|
53
|
+
version: '3.0'
|
54
54
|
type: :development
|
55
55
|
prerelease: false
|
56
56
|
version_requirements: !ruby/object:Gem::Requirement
|
57
57
|
requirements:
|
58
|
-
- -
|
58
|
+
- - "~>"
|
59
59
|
- !ruby/object:Gem::Version
|
60
|
-
version:
|
60
|
+
version: '3.0'
|
61
61
|
- !ruby/object:Gem::Dependency
|
62
62
|
name: rspec-rails
|
63
63
|
requirement: !ruby/object:Gem::Requirement
|
@@ -98,7 +98,6 @@ extra_rdoc_files: []
|
|
98
98
|
files:
|
99
99
|
- ".gitignore"
|
100
100
|
- ".rspec"
|
101
|
-
- ".rvmrc"
|
102
101
|
- ".travis.yml"
|
103
102
|
- CHANGELOG.md
|
104
103
|
- Gemfile
|
@@ -146,7 +145,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
146
145
|
version: '0'
|
147
146
|
requirements: []
|
148
147
|
rubyforge_project:
|
149
|
-
rubygems_version: 2.4.
|
148
|
+
rubygems_version: 2.4.5
|
150
149
|
signing_key:
|
151
150
|
specification_version: 4
|
152
151
|
summary: PostgreSQL-only database-level audit logging of all databases changes.
|
data/.rvmrc
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
rvm 1.9.3-p0@pg_audit_log --create
|