pg_audit_log 0.2.0 → 0.3.0
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.
- data/.rvmrc +1 -1
- data/lib/pg_audit_log/extensions/3.0/postgresql_adapter.rb +27 -0
- data/lib/pg_audit_log/extensions/3.1/postgresql_adapter.rb +27 -1
- data/lib/pg_audit_log/triggers.rb +2 -2
- data/lib/pg_audit_log/version.rb +1 -1
- data/pg_audit_log.gemspec +1 -0
- data/spec/pg_audit_log_spec.rb +40 -7
- data/spec/spec_helper.rb +10 -3
- data/spec/triggers_spec.rb +30 -18
- metadata +23 -12
data/.rvmrc
CHANGED
@@ -1 +1 @@
|
|
1
|
-
rvm 1.9.2
|
1
|
+
rvm 1.9.2@pg_audit_log --create
|
@@ -50,5 +50,32 @@ class ActiveRecord::ConnectionAdapters::PostgreSQLAdapter
|
|
50
50
|
execute_without_auditing("RELEASE SAVEPOINT #{current_savepoint_name}")
|
51
51
|
end
|
52
52
|
|
53
|
+
def drop_table_with_auditing(table_name, options = {})
|
54
|
+
if PgAuditLog::Triggers.tables_with_triggers.include?(table_name)
|
55
|
+
PgAuditLog::Triggers.drop_for_table(table_name)
|
56
|
+
end
|
57
|
+
drop_table_without_auditing(table_name, options)
|
58
|
+
end
|
59
|
+
alias_method_chain :drop_table, :auditing
|
60
|
+
|
61
|
+
def create_table_with_auditing(table_name, options = {}, &block)
|
62
|
+
create_table_without_auditing(table_name, options, &block)
|
63
|
+
unless PgAuditLog::Triggers.tables_with_triggers.include?(table_name)
|
64
|
+
PgAuditLog::Triggers.create_for_table(table_name)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
alias_method_chain :create_table, :auditing
|
68
|
+
|
69
|
+
def rename_table_with_auditing(table_name, new_name)
|
70
|
+
rename_table_without_auditing(table_name, new_name)
|
71
|
+
if PgAuditLog::Triggers.tables_with_triggers.include?(table_name)
|
72
|
+
PgAuditLog::Triggers.drop_for_table(table_name)
|
73
|
+
end
|
74
|
+
unless PgAuditLog::Triggers.tables_with_triggers.include?(new_name)
|
75
|
+
PgAuditLog::Triggers.create_for_table(new_name)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
alias_method_chain :rename_table, :auditing
|
79
|
+
|
53
80
|
end
|
54
81
|
|
@@ -59,6 +59,32 @@ class ActiveRecord::ConnectionAdapters::PostgreSQLAdapter
|
|
59
59
|
execute_without_auditing("RELEASE SAVEPOINT #{current_savepoint_name}")
|
60
60
|
end
|
61
61
|
|
62
|
-
|
62
|
+
def drop_table_with_auditing(table_name, options = {})
|
63
|
+
if PgAuditLog::Triggers.tables_with_triggers.include?(table_name)
|
64
|
+
PgAuditLog::Triggers.drop_for_table(table_name)
|
65
|
+
end
|
66
|
+
drop_table_without_auditing(table_name, options)
|
67
|
+
end
|
68
|
+
alias_method_chain :drop_table, :auditing
|
69
|
+
|
70
|
+
def create_table_with_auditing(table_name, options = {}, &block)
|
71
|
+
create_table_without_auditing(table_name, options, &block)
|
72
|
+
unless PgAuditLog::Triggers.tables_with_triggers.include?(table_name)
|
73
|
+
PgAuditLog::Triggers.create_for_table(table_name)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
alias_method_chain :create_table, :auditing
|
63
77
|
|
78
|
+
def rename_table_with_auditing(table_name, new_name)
|
79
|
+
rename_table_without_auditing(table_name, new_name)
|
80
|
+
if PgAuditLog::Triggers.tables_with_triggers.include?(table_name)
|
81
|
+
PgAuditLog::Triggers.drop_for_table(table_name)
|
82
|
+
end
|
83
|
+
unless PgAuditLog::Triggers.tables_with_triggers.include?(new_name)
|
84
|
+
PgAuditLog::Triggers.create_for_table(new_name)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
alias_method_chain :rename_table, :auditing
|
88
|
+
|
89
|
+
end
|
64
90
|
|
@@ -30,13 +30,13 @@ module PgAuditLog
|
|
30
30
|
|
31
31
|
def install
|
32
32
|
tables.each do |table|
|
33
|
-
create_for_table(table)
|
33
|
+
create_for_table(table) unless tables_with_triggers.include?(table)
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
37
37
|
def uninstall
|
38
38
|
tables_with_triggers.each do |table|
|
39
|
-
drop_for_table(table)
|
39
|
+
drop_for_table(table) if tables_with_triggers.include?(table)
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
data/lib/pg_audit_log/version.rb
CHANGED
data/pg_audit_log.gemspec
CHANGED
data/spec/pg_audit_log_spec.rb
CHANGED
@@ -24,14 +24,7 @@ describe PgAuditLog do
|
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
27
|
-
before do
|
28
|
-
PgAuditLog::Triggers.create_for_table(AuditedModel.table_name)
|
29
|
-
PgAuditLog::Triggers.create_for_table(AuditedModelWithoutPrimaryKey.table_name)
|
30
|
-
end
|
31
|
-
|
32
27
|
after do
|
33
|
-
PgAuditLog::Triggers.drop_for_table(AuditedModel.table_name)
|
34
|
-
PgAuditLog::Triggers.drop_for_table(AuditedModelWithoutPrimaryKey.table_name)
|
35
28
|
PgAuditLog::Entry.connection.execute("TRUNCATE #{PgAuditLog::Entry.quoted_table_name}")
|
36
29
|
end
|
37
30
|
|
@@ -229,4 +222,44 @@ describe PgAuditLog do
|
|
229
222
|
end
|
230
223
|
end
|
231
224
|
|
225
|
+
describe "during migrations" do
|
226
|
+
let(:connection) { ActiveRecord::Base.connection }
|
227
|
+
|
228
|
+
before do
|
229
|
+
connection.drop_table("test_table") rescue nil
|
230
|
+
connection.drop_table("new_table") rescue nil
|
231
|
+
end
|
232
|
+
|
233
|
+
after do
|
234
|
+
connection.drop_table("test_table") rescue nil
|
235
|
+
end
|
236
|
+
|
237
|
+
describe "when creating the table" do
|
238
|
+
it "should automatically create the trigger" do
|
239
|
+
PgAuditLog::Triggers.tables_with_triggers.should_not include("test_table")
|
240
|
+
connection.create_table("test_table")
|
241
|
+
PgAuditLog::Triggers.tables_with_triggers.should include("test_table")
|
242
|
+
end
|
243
|
+
end
|
244
|
+
|
245
|
+
describe "when dropping the table" do
|
246
|
+
it "should automatically drop the trigger" do
|
247
|
+
connection.create_table("test_table")
|
248
|
+
connection.drop_table("test_table")
|
249
|
+
PgAuditLog::Triggers.tables_with_triggers.should_not include("test_table")
|
250
|
+
end
|
251
|
+
end
|
252
|
+
|
253
|
+
describe "when renaming the table" do
|
254
|
+
it "should automatically drop and create the trigger" do
|
255
|
+
new_table_name = "new_table_#{Time.now.to_i}"
|
256
|
+
connection.create_table("test_table")
|
257
|
+
connection.rename_table("test_table", new_table_name)
|
258
|
+
PgAuditLog::Triggers.tables_with_triggers.should_not include("test_table")
|
259
|
+
PgAuditLog::Triggers.tables_with_triggers.should include(new_table_name)
|
260
|
+
connection.drop_table(new_table_name) rescue nil
|
261
|
+
end
|
262
|
+
end
|
263
|
+
end
|
264
|
+
|
232
265
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -18,14 +18,21 @@ rescue PGError => e
|
|
18
18
|
raise e
|
19
19
|
end
|
20
20
|
|
21
|
-
PgAuditLog::Entry.uninstall
|
22
|
-
PgAuditLog::Entry.install
|
23
|
-
PgAuditLog::Function.install
|
24
21
|
|
25
22
|
RSpec.configure do |config|
|
26
23
|
config.mock_with :rspec
|
27
24
|
config.extend WithModel
|
28
25
|
|
26
|
+
config.before(:all) do
|
27
|
+
connection.tables.each do |table|
|
28
|
+
connection.drop_table_without_auditing(table)
|
29
|
+
end
|
30
|
+
PgAuditLog::Triggers.uninstall rescue nil
|
31
|
+
PgAuditLog::Entry.uninstall
|
32
|
+
PgAuditLog::Entry.install
|
33
|
+
PgAuditLog::Function.install
|
34
|
+
end
|
35
|
+
|
29
36
|
config.after(:each) do
|
30
37
|
ActiveRecord::Base.connection.reconnect!
|
31
38
|
end
|
data/spec/triggers_spec.rb
CHANGED
@@ -13,11 +13,11 @@ describe PgAuditLog::Triggers do
|
|
13
13
|
table {}
|
14
14
|
end
|
15
15
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
end
|
16
|
+
before do
|
17
|
+
PgAuditLog::Triggers.drop_for_table(TableWithoutTriggers.table_name) rescue nil
|
18
|
+
end
|
20
19
|
|
20
|
+
describe ".tables_with_triggers" do
|
21
21
|
it "should return an array of all tables that do have an audit trigger installed" do
|
22
22
|
PgAuditLog::Triggers.tables_with_triggers.should include(TableWithTriggers.table_name)
|
23
23
|
PgAuditLog::Triggers.tables_with_triggers.should_not include(TableWithoutTriggers.table_name)
|
@@ -25,29 +25,43 @@ describe PgAuditLog::Triggers do
|
|
25
25
|
end
|
26
26
|
|
27
27
|
describe ".tables_without_triggers" do
|
28
|
-
before do
|
29
|
-
PgAuditLog::Triggers.create_for_table(TableWithTriggers.table_name)
|
30
|
-
end
|
31
|
-
|
32
28
|
it "should return an array of all tables that do not have an audit trigger installed" do
|
33
29
|
PgAuditLog::Triggers.tables_without_triggers.should_not include(TableWithTriggers.table_name)
|
34
30
|
PgAuditLog::Triggers.tables_without_triggers.should include(TableWithoutTriggers.table_name)
|
35
31
|
end
|
36
32
|
end
|
37
33
|
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
34
|
+
context "when no triggers are installed" do
|
35
|
+
before do
|
36
|
+
PgAuditLog::Triggers.uninstall
|
37
|
+
end
|
38
|
+
|
39
|
+
describe ".install" do
|
40
|
+
it "should work" do
|
41
|
+
->{
|
42
|
+
PgAuditLog::Triggers.install
|
43
|
+
}.should_not raise_error
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
describe ".uninstall" do
|
48
|
+
it "should work" do
|
49
|
+
->{
|
50
|
+
PgAuditLog::Triggers.uninstall
|
51
|
+
}.should_not raise_error
|
52
|
+
end
|
43
53
|
end
|
54
|
+
|
44
55
|
end
|
45
56
|
|
46
57
|
context "when triggers are installed" do
|
47
|
-
|
48
|
-
|
58
|
+
describe ".install" do
|
59
|
+
it "should work" do
|
60
|
+
->{
|
61
|
+
PgAuditLog::Triggers.install
|
62
|
+
}.should_not raise_error
|
63
|
+
end
|
49
64
|
end
|
50
|
-
|
51
65
|
describe ".uninstall" do
|
52
66
|
it "should work" do
|
53
67
|
->{
|
@@ -87,7 +101,5 @@ describe PgAuditLog::Triggers do
|
|
87
101
|
end
|
88
102
|
|
89
103
|
end
|
90
|
-
|
91
|
-
|
92
104
|
end
|
93
105
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pg_audit_log
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-
|
12
|
+
date: 2011-10-02 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
16
|
-
requirement: &
|
16
|
+
requirement: &2164856600 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 3.0.0
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *2164856600
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: pg
|
27
|
-
requirement: &
|
27
|
+
requirement: &2164769800 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: 0.9.0
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *2164769800
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: rspec-rails
|
38
|
-
requirement: &
|
38
|
+
requirement: &2164769120 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *2164769120
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: with_model
|
49
|
-
requirement: &
|
49
|
+
requirement: &2164768300 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,7 +54,18 @@ dependencies:
|
|
54
54
|
version: 0.1.3
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *2164768300
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: autotest
|
60
|
+
requirement: &2164767660 !ruby/object:Gem::Requirement
|
61
|
+
none: false
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
66
|
+
type: :development
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: *2164767660
|
58
69
|
description: A completely transparent audit logging component for your application
|
59
70
|
using a stored procedure and triggers. Comes with specs for your project and a rake
|
60
71
|
task to generate the reverse SQL to undo changes logged
|
@@ -107,7 +118,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
107
118
|
version: '0'
|
108
119
|
segments:
|
109
120
|
- 0
|
110
|
-
hash: -
|
121
|
+
hash: -4145320202553197092
|
111
122
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
112
123
|
none: false
|
113
124
|
requirements:
|
@@ -116,7 +127,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
116
127
|
version: '0'
|
117
128
|
segments:
|
118
129
|
- 0
|
119
|
-
hash: -
|
130
|
+
hash: -4145320202553197092
|
120
131
|
requirements: []
|
121
132
|
rubyforge_project:
|
122
133
|
rubygems_version: 1.8.10
|