pg_audit_log 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
data/.rvmrc CHANGED
@@ -1 +1 @@
1
- rvm 1.9.2-p136@pg_audit_log --create
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
- end
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
 
@@ -1,3 +1,3 @@
1
1
  module PgAuditLog
2
- VERSION = "0.2.0"
2
+ VERSION = "0.3.0"
3
3
  end
data/pg_audit_log.gemspec CHANGED
@@ -21,4 +21,5 @@ Gem::Specification.new do |s|
21
21
  s.add_dependency("pg", ">= 0.9.0")
22
22
  s.add_development_dependency('rspec-rails')
23
23
  s.add_development_dependency('with_model', '>= 0.1.3')
24
+ s.add_development_dependency('autotest')
24
25
  end
@@ -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
@@ -13,11 +13,11 @@ describe PgAuditLog::Triggers do
13
13
  table {}
14
14
  end
15
15
 
16
- describe ".tables_with_triggers" do
17
- before do
18
- PgAuditLog::Triggers.create_for_table(TableWithTriggers.table_name)
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
- describe ".install" do
39
- it "should work" do
40
- ->{
41
- PgAuditLog::Triggers.install
42
- }.should_not raise_error
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
- before do
48
- PgAuditLog::Triggers.create_for_table(TableWithTriggers.table_name)
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.2.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-09-15 00:00:00.000000000Z
12
+ date: 2011-10-02 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
16
- requirement: &2152957860 !ruby/object:Gem::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: *2152957860
24
+ version_requirements: *2164856600
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: pg
27
- requirement: &2152957060 !ruby/object:Gem::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: *2152957060
35
+ version_requirements: *2164769800
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rspec-rails
38
- requirement: &2152956560 !ruby/object:Gem::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: *2152956560
46
+ version_requirements: *2164769120
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: with_model
49
- requirement: &2152955700 !ruby/object:Gem::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: *2152955700
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: -1882203804259823280
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: -1882203804259823280
130
+ hash: -4145320202553197092
120
131
  requirements: []
121
132
  rubyforge_project:
122
133
  rubygems_version: 1.8.10