acts_as_audited 2.0.0.rc4 → 2.0.0.rc5

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -1,8 +1,17 @@
1
- acts_as_audited ChangeLog
1
+ acts_as_audited ChangeLog
2
2
  -------------------------------------------------------------------------------
3
+
4
+ Not released - 2.0.0
5
+ Rails 3 support
6
+ Support for associated audits
7
+ Support for remote IP address storage
8
+ Plenty of bug fixes and refactoring
9
+
3
10
  * 2009-01-27 - Store old and new values for updates, and store all attributes on destroy.
4
11
  Refactored revisioning methods to work as expected
5
12
  * 2008-10-10 - changed to make it work in development mode
13
+ * 2008-09-24 - Add ability to record parent record of the record being audited
14
+ [Kenneth Kalmer]
6
15
  * 2008-04-19 - refactored to make compatible with dirty tracking in edge rails
7
16
  and to stop storing both old and new values in a single audit
8
17
  * 2008-04-18 - Fix NoMethodError when trying to access the :previous revision
@@ -22,4 +31,4 @@
22
31
  that saves the new value after every change and not just the
23
32
  first, and performs proper type-casting before doing comparisons
24
33
  * 2006-08-14 - The "changes" are now saved as a serialized hash
25
- * 2006-07-21 - initial version
34
+ * 2006-07-21 - initial version
data/README.rdoc CHANGED
@@ -3,13 +3,13 @@
3
3
  +acts_as_audited+ is an ActiveRecord extension that logs all changes to your
4
4
  models in an audits table, with optional revision comments. +acts_as_audited+
5
5
  has been updated to work with Rails 3, to use it with older version of Rails,
6
- please see the <tt>rails2</tt> branch.
6
+ please see the <tt>1.1-stable</tt> branch.
7
7
 
8
8
  == Installation
9
9
 
10
10
  In <tt>Gemfile</tt>:
11
11
 
12
- gem "acts_as_audited", "2.0.0.rc1"
12
+ gem "acts_as_audited", "2.0.0.rc5"
13
13
 
14
14
  In your application root, run:
15
15
 
@@ -50,6 +50,19 @@ before create/update/destroy. If the <tt>:comment_required</tt> option is given
50
50
  the save/update/destroy action will fail with add an error on <tt>model.audit_comment</tt> and triggering a
51
51
  transaction rollback if <tt>model.audit_comment</tt> is nil.
52
52
 
53
+ To record an audit for an associated model, use the <tt>:associated_with</tt> option.
54
+
55
+ class User < ActiveRecord::Base
56
+ acts_as_audited :associated_with => :company
57
+ end
58
+
59
+ If desired, the associated model can access its audits using <tt>has_associated_audits</tt>.
60
+
61
+ class Company < ActiveRecord::Base
62
+ has_many :users
63
+ has_associated_audits
64
+ end
65
+
53
66
  To record a user in the audits outside of a web request, you can use +as_user+:
54
67
 
55
68
  Audit.as_user(user) do
@@ -65,9 +78,11 @@ If your model declares +attr_accessible+ after +acts_as_audited+, you need to se
65
78
  attr_accessible :name
66
79
  end
67
80
 
81
+ Another caveat is documented in issue 26[https://github.com/collectiveidea/acts_as_audited/issues#issue/26], where an audit created on the first request to the server does not have a user. Please review the Github issue for more details on how to fix this. It does not appear to affect Rails 3.
82
+
68
83
  == Compatability
69
84
 
70
- +acts_as_audited+ works with Rails 3.0.0 or later. For older versions of Rails, please see the <tt>rails2</tt> branch.
85
+ +acts_as_audited+ works with Rails 3.0.3. For older versions of Rails, please see the <tt>1.1-stable</tt> branch.
71
86
 
72
87
  == Getting Help
73
88
 
@@ -75,10 +90,16 @@ Review the documentation at http://rdoc.info/github/collectiveidea/acts_as_audit
75
90
 
76
91
  Join the mailing list for getting help or offering suggestions - http://groups.google.com/group/acts_as_audited
77
92
 
93
+ == Branches
94
+
95
+ The <tt>master</tt> branch is considered stable, and you should be able to use it at any time. The <tt>development</tt> branch will contain all active development and might be a moving target from time to time.
96
+
78
97
  == Contributing
79
98
 
80
99
  Contributions are always welcome. Checkout the latest code on GitHub - http://github.com/collectiveidea/acts_as_audited
81
100
 
101
+ When contributing a bug-fix, please use a topic branch created off our <tt>master</tt> branch. When developing a new feature, please create a topic branch of our <tt>development</tt> branch (and rebase before submiting a pull request).
102
+
82
103
  Please include tests with your patches. There are a few gems required to run the tests:
83
104
 
84
105
  $ bundle install
@@ -88,3 +109,4 @@ Make sure the tests pass against the version of Rails specified in the Gemfile
88
109
  $ rake spec test
89
110
 
90
111
  Please report bugs or feature suggestions on GitHub - http://github.com/collectiveidea/acts_as_audited/issues
112
+
data/Rakefile CHANGED
@@ -16,7 +16,7 @@ begin
16
16
  gem.summary = %Q{ActiveRecord extension that logs all changes to your models in an audits table}
17
17
  gem.email = "brandon@opensoul.org"
18
18
  gem.homepage = "http://github.com/collectiveidea/acts_as_audited"
19
- gem.authors = ["Brandon Keepers"]
19
+ gem.authors = ["Brandon Keepers", "Kenneth Kalmer"]
20
20
  gem.rdoc_options << '--main' << 'README.rdoc' << '--line-numbers' << '--inline-source'
21
21
  gem.version = ActsAsAudited::VERSION
22
22
 
@@ -1,95 +1,98 @@
1
1
  # Generated by jeweler
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{acts_as_audited}
8
- s.version = "2.0.0.rc3"
8
+ s.version = "2.0.0.rc5"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
11
- s.authors = ["Brandon Keepers"]
12
- s.date = %q{2011-02-02}
11
+ s.authors = ["Brandon Keepers", "Kenneth Kalmer"]
12
+ s.date = %q{2011-02-05}
13
13
  s.email = %q{brandon@opensoul.org}
14
14
  s.extra_rdoc_files = [
15
15
  "LICENSE",
16
- "README.rdoc"
16
+ "README.rdoc"
17
17
  ]
18
18
  s.files = [
19
- ".gitignore",
20
- ".yardopts",
21
- "CHANGELOG",
22
- "Gemfile",
23
- "Gemfile.lock",
24
- "LICENSE",
25
- "README.rdoc",
26
- "Rakefile",
27
- "acts_as_audited.gemspec",
28
- "autotest/discover.rb",
29
- "lib/acts_as_audited.rb",
30
- "lib/acts_as_audited/audit.rb",
31
- "lib/acts_as_audited/audit_sweeper.rb",
32
- "lib/acts_as_audited/auditor.rb",
33
- "lib/generators/acts_as_audited/install_generator.rb",
34
- "lib/generators/acts_as_audited/templates/add_comment_to_audits.rb",
35
- "lib/generators/acts_as_audited/templates/add_remote_address_to_audits.rb",
36
- "lib/generators/acts_as_audited/templates/install.rb",
37
- "lib/generators/acts_as_audited/templates/rename_changes_to_audited_changes.rb",
38
- "lib/generators/acts_as_audited/upgrade_generator.rb",
39
- "spec/acts_as_audited_spec.rb",
40
- "spec/audit_spec.rb",
41
- "spec/audit_sweeper_spec.rb",
42
- "spec/audited_spec_helpers.rb",
43
- "spec/db/schema.rb",
44
- "spec/rails_app/config/application.rb",
45
- "spec/rails_app/config/boot.rb",
46
- "spec/rails_app/config/database.yml",
47
- "spec/rails_app/config/environment.rb",
48
- "spec/rails_app/config/environments/development.rb",
49
- "spec/rails_app/config/environments/production.rb",
50
- "spec/rails_app/config/environments/test.rb",
51
- "spec/rails_app/config/initializers/backtrace_silencers.rb",
52
- "spec/rails_app/config/initializers/inflections.rb",
53
- "spec/rails_app/config/initializers/secret_token.rb",
54
- "spec/rails_app/config/routes.rb",
55
- "spec/spec_helper.rb",
56
- "spec/spec_models.rb",
57
- "test/db/version_1.rb",
58
- "test/db/version_2.rb",
59
- "test/db/version_3.rb",
60
- "test/install_generator_test.rb",
61
- "test/test_helper.rb",
62
- "test/upgrade_generator_test.rb"
19
+ ".yardopts",
20
+ "CHANGELOG",
21
+ "Gemfile",
22
+ "Gemfile.lock",
23
+ "LICENSE",
24
+ "README.rdoc",
25
+ "Rakefile",
26
+ "acts_as_audited.gemspec",
27
+ "autotest/discover.rb",
28
+ "lib/acts_as_audited.rb",
29
+ "lib/acts_as_audited/audit.rb",
30
+ "lib/acts_as_audited/audit_sweeper.rb",
31
+ "lib/acts_as_audited/auditor.rb",
32
+ "lib/generators/acts_as_audited/install_generator.rb",
33
+ "lib/generators/acts_as_audited/templates/add_association_to_audits.rb",
34
+ "lib/generators/acts_as_audited/templates/add_comment_to_audits.rb",
35
+ "lib/generators/acts_as_audited/templates/add_remote_address_to_audits.rb",
36
+ "lib/generators/acts_as_audited/templates/install.rb",
37
+ "lib/generators/acts_as_audited/templates/rename_changes_to_audited_changes.rb",
38
+ "lib/generators/acts_as_audited/templates/rename_parent_to_association.rb",
39
+ "lib/generators/acts_as_audited/upgrade_generator.rb",
40
+ "spec/acts_as_audited_spec.rb",
41
+ "spec/audit_spec.rb",
42
+ "spec/audit_sweeper_spec.rb",
43
+ "spec/audited_spec_helpers.rb",
44
+ "spec/db/schema.rb",
45
+ "spec/rails_app/config/application.rb",
46
+ "spec/rails_app/config/boot.rb",
47
+ "spec/rails_app/config/database.yml",
48
+ "spec/rails_app/config/environment.rb",
49
+ "spec/rails_app/config/environments/development.rb",
50
+ "spec/rails_app/config/environments/production.rb",
51
+ "spec/rails_app/config/environments/test.rb",
52
+ "spec/rails_app/config/initializers/backtrace_silencers.rb",
53
+ "spec/rails_app/config/initializers/inflections.rb",
54
+ "spec/rails_app/config/initializers/secret_token.rb",
55
+ "spec/rails_app/config/routes.rb",
56
+ "spec/spec_helper.rb",
57
+ "spec/spec_models.rb",
58
+ "test/db/version_1.rb",
59
+ "test/db/version_2.rb",
60
+ "test/db/version_3.rb",
61
+ "test/db/version_4.rb",
62
+ "test/install_generator_test.rb",
63
+ "test/test_helper.rb",
64
+ "test/upgrade_generator_test.rb"
63
65
  ]
64
66
  s.homepage = %q{http://github.com/collectiveidea/acts_as_audited}
65
- s.rdoc_options = ["--charset=UTF-8", "--main", "README.rdoc", "--line-numbers", "--inline-source"]
67
+ s.rdoc_options = ["--main", "README.rdoc", "--line-numbers", "--inline-source"]
66
68
  s.require_paths = ["lib"]
67
69
  s.rubygems_version = %q{1.3.7}
68
70
  s.summary = %q{ActiveRecord extension that logs all changes to your models in an audits table}
69
71
  s.test_files = [
70
72
  "spec/acts_as_audited_spec.rb",
71
- "spec/audit_spec.rb",
72
- "spec/audit_sweeper_spec.rb",
73
- "spec/audited_spec_helpers.rb",
74
- "spec/db/schema.rb",
75
- "spec/rails_app/config/application.rb",
76
- "spec/rails_app/config/boot.rb",
77
- "spec/rails_app/config/environment.rb",
78
- "spec/rails_app/config/environments/development.rb",
79
- "spec/rails_app/config/environments/production.rb",
80
- "spec/rails_app/config/environments/test.rb",
81
- "spec/rails_app/config/initializers/backtrace_silencers.rb",
82
- "spec/rails_app/config/initializers/inflections.rb",
83
- "spec/rails_app/config/initializers/secret_token.rb",
84
- "spec/rails_app/config/routes.rb",
85
- "spec/spec_helper.rb",
86
- "spec/spec_models.rb",
87
- "test/db/version_1.rb",
88
- "test/db/version_2.rb",
89
- "test/db/version_3.rb",
90
- "test/install_generator_test.rb",
91
- "test/test_helper.rb",
92
- "test/upgrade_generator_test.rb"
73
+ "spec/audit_spec.rb",
74
+ "spec/audit_sweeper_spec.rb",
75
+ "spec/audited_spec_helpers.rb",
76
+ "spec/db/schema.rb",
77
+ "spec/rails_app/config/application.rb",
78
+ "spec/rails_app/config/boot.rb",
79
+ "spec/rails_app/config/environment.rb",
80
+ "spec/rails_app/config/environments/development.rb",
81
+ "spec/rails_app/config/environments/production.rb",
82
+ "spec/rails_app/config/environments/test.rb",
83
+ "spec/rails_app/config/initializers/backtrace_silencers.rb",
84
+ "spec/rails_app/config/initializers/inflections.rb",
85
+ "spec/rails_app/config/initializers/secret_token.rb",
86
+ "spec/rails_app/config/routes.rb",
87
+ "spec/spec_helper.rb",
88
+ "spec/spec_models.rb",
89
+ "test/db/version_1.rb",
90
+ "test/db/version_2.rb",
91
+ "test/db/version_3.rb",
92
+ "test/db/version_4.rb",
93
+ "test/install_generator_test.rb",
94
+ "test/test_helper.rb",
95
+ "test/upgrade_generator_test.rb"
93
96
  ]
94
97
 
95
98
  if s.respond_to? :specification_version then
@@ -97,15 +100,33 @@ Gem::Specification.new do |s|
97
100
  s.specification_version = 3
98
101
 
99
102
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
103
+ s.add_runtime_dependency(%q<rails>, ["= 3.0.3"])
104
+ s.add_runtime_dependency(%q<sqlite3-ruby>, [">= 0"])
105
+ s.add_runtime_dependency(%q<rspec-rails>, ["~> 2.4.0"])
106
+ s.add_runtime_dependency(%q<rcov>, [">= 0"])
107
+ s.add_runtime_dependency(%q<yard>, [">= 0"])
108
+ s.add_runtime_dependency(%q<jeweler>, [">= 0"])
100
109
  s.add_runtime_dependency(%q<activerecord>, ["= 3.0.3"])
101
110
  s.add_development_dependency(%q<rails>, ["= 3.0.3"])
102
111
  s.add_development_dependency(%q<rspec-rails>, ["~> 2.4.0"])
103
112
  else
113
+ s.add_dependency(%q<rails>, ["= 3.0.3"])
114
+ s.add_dependency(%q<sqlite3-ruby>, [">= 0"])
115
+ s.add_dependency(%q<rspec-rails>, ["~> 2.4.0"])
116
+ s.add_dependency(%q<rcov>, [">= 0"])
117
+ s.add_dependency(%q<yard>, [">= 0"])
118
+ s.add_dependency(%q<jeweler>, [">= 0"])
104
119
  s.add_dependency(%q<activerecord>, ["= 3.0.3"])
105
120
  s.add_dependency(%q<rails>, ["= 3.0.3"])
106
121
  s.add_dependency(%q<rspec-rails>, ["~> 2.4.0"])
107
122
  end
108
123
  else
124
+ s.add_dependency(%q<rails>, ["= 3.0.3"])
125
+ s.add_dependency(%q<sqlite3-ruby>, [">= 0"])
126
+ s.add_dependency(%q<rspec-rails>, ["~> 2.4.0"])
127
+ s.add_dependency(%q<rcov>, [">= 0"])
128
+ s.add_dependency(%q<yard>, [">= 0"])
129
+ s.add_dependency(%q<jeweler>, [">= 0"])
109
130
  s.add_dependency(%q<activerecord>, ["= 3.0.3"])
110
131
  s.add_dependency(%q<rails>, ["= 3.0.3"])
111
132
  s.add_dependency(%q<rspec-rails>, ["~> 2.4.0"])
@@ -24,7 +24,7 @@ require 'active_record'
24
24
 
25
25
  # To get started, please review ActsAsAudited::Auditor::ClassMethods#acts_as_audited
26
26
  module ActsAsAudited
27
- VERSION = '2.0.0.rc4'
27
+ VERSION = '2.0.0.rc5'
28
28
 
29
29
  mattr_accessor :current_user_method
30
30
  # The method to be called to return the current user for logging in the audits.
@@ -12,6 +12,7 @@ require 'set'
12
12
  class Audit < ActiveRecord::Base
13
13
  belongs_to :auditable, :polymorphic => true
14
14
  belongs_to :user, :polymorphic => true
15
+ belongs_to :association, :polymorphic => true
15
16
 
16
17
  before_create :set_version_number, :set_audit_user
17
18
 
@@ -87,7 +88,7 @@ class Audit < ActiveRecord::Base
87
88
  alias_method :user_as_model, :user
88
89
  alias_method :user, :user_as_string
89
90
 
90
- # Return an instantance of what the object looked like at this revision. If
91
+ # Return an instance of what the object looked like at this revision. If
91
92
  # the object has been destroyed, this will be a new record.
92
93
  def revision
93
94
  clazz = auditable_type.constantize
@@ -54,6 +54,7 @@ module ActsAsAudited
54
54
 
55
55
  class_inheritable_reader :non_audited_columns
56
56
  class_inheritable_reader :auditing_enabled
57
+ class_inheritable_reader :audit_associated_with
57
58
 
58
59
  if options[:only]
59
60
  except = self.column_names - options[:only].flatten.map(&:to_s)
@@ -63,6 +64,7 @@ module ActsAsAudited
63
64
  except |= Array(options[:except]).collect(&:to_s) if options[:except]
64
65
  end
65
66
  write_inheritable_attribute :non_audited_columns, except
67
+ write_inheritable_attribute :audit_associated_with, options[:associated_with]
66
68
 
67
69
  if options[:comment_required]
68
70
  validates_presence_of :audit_comment
@@ -89,6 +91,11 @@ module ActsAsAudited
89
91
 
90
92
  write_inheritable_attribute :auditing_enabled, true
91
93
  end
94
+
95
+ def has_associated_audits
96
+ has_many :associated_audits, :as => :association, :class_name => "Audit"
97
+ end
98
+
92
99
  end
93
100
 
94
101
  module InstanceMethods
@@ -202,6 +209,7 @@ module ActsAsAudited
202
209
  end
203
210
 
204
211
  def write_audit(attrs)
212
+ attrs[:association] = self.send(audit_associated_with) unless audit_associated_with.nil?
205
213
  self.audit_comment = nil
206
214
  self.audits.create attrs if auditing_enabled
207
215
  end
@@ -0,0 +1,11 @@
1
+ class <%= migration_class_name %> < ActiveRecord::Migration
2
+ def self.up
3
+ add_column :audits, :association_id, :integer
4
+ add_column :audits, :association_type, :string
5
+ end
6
+
7
+ def self.down
8
+ remove_column :audits, :association_type
9
+ remove_column :audits, :association_id
10
+ end
11
+ end
@@ -3,6 +3,8 @@ class <%= migration_class_name %> < ActiveRecord::Migration
3
3
  create_table :audits, :force => true do |t|
4
4
  t.column :auditable_id, :integer
5
5
  t.column :auditable_type, :string
6
+ t.column :association_id, :integer
7
+ t.column :association_type, :string
6
8
  t.column :user_id, :integer
7
9
  t.column :user_type, :string
8
10
  t.column :username, :string
@@ -15,6 +17,7 @@ class <%= migration_class_name %> < ActiveRecord::Migration
15
17
  end
16
18
 
17
19
  add_index :audits, [:auditable_id, :auditable_type], :name => 'auditable_index'
20
+ add_index :audits, [:association_id, :association_type], :name => 'association_index'
18
21
  add_index :audits, [:user_id, :user_type], :name => 'user_index'
19
22
  add_index :audits, :created_at
20
23
  end
@@ -0,0 +1,11 @@
1
+ class <%= migration_class_name %> < ActiveRecord::Migration
2
+ def self.up
3
+ rename_column :audits, :auditable_parent_id, :association_id
4
+ rename_column :audits, :auditable_parent_type, :association_type
5
+ end
6
+
7
+ def self.down
8
+ rename_column :audits, :association_type, :auditable_parent_type
9
+ rename_column :audits, :association_id, :auditable_parent_id
10
+ end
11
+ end
@@ -43,6 +43,14 @@ module ActsAsAudited
43
43
  unless columns.include?( 'remote_address' )
44
44
  yield :add_remote_address_to_audits
45
45
  end
46
+
47
+ unless columns.include?( 'association_id' )
48
+ if columns.include?('auditable_parent_id')
49
+ yield :rename_parent_to_association
50
+ else
51
+ yield :add_association_to_audits
52
+ end
53
+ end
46
54
  end
47
55
  end
48
56
  end
@@ -170,6 +170,35 @@ describe ActsAsAudited::Auditor do
170
170
  end
171
171
  end
172
172
 
173
+ describe "associated with" do
174
+ let(:owner) { Owner.create(:name => 'Owner') }
175
+ let(:owned_company) { OwnedCompany.create!(:name => 'The auditors', :owner => owner) }
176
+
177
+ it "should record the associated object on create" do
178
+ owned_company.audits.first.association.should == owner
179
+ end
180
+
181
+ it "should store the associated object on update" do
182
+ owned_company.update_attribute(:name, 'The Auditors')
183
+ owned_company.audits.last.association.should == owner
184
+ end
185
+
186
+ it "should store the associated object on destroy" do
187
+ owned_company.destroy
188
+ owned_company.audits.last.association.should == owner
189
+ end
190
+ end
191
+
192
+ describe "has associated audits" do
193
+ let!(:owner) { Owner.create!(:name => 'Owner') }
194
+ let!(:owned_company) { OwnedCompany.create!(:name => 'The auditors', :owner => owner) }
195
+
196
+ it "should list the associated audits" do
197
+ owner.associated_audits.length.should == 1
198
+ owner.associated_audits.first.auditable.should == owned_company
199
+ end
200
+ end
201
+
173
202
  describe "revisions" do
174
203
  let( :user ) { create_versions }
175
204
 
data/spec/db/schema.rb CHANGED
@@ -12,11 +12,23 @@ ActiveRecord::Schema.define(:version => 0) do
12
12
 
13
13
  create_table :companies, :force => true do |t|
14
14
  t.column :name, :string
15
+ t.column :owner_id, :integer
16
+ end
17
+
18
+ create_table :authors, :force => true do |t|
19
+ t.column :name, :string
20
+ end
21
+
22
+ create_table :books, :force => true do |t|
23
+ t.column :authord_id, :integer
24
+ t.column :title, :string
15
25
  end
16
26
 
17
27
  create_table :audits, :force => true do |t|
18
28
  t.column :auditable_id, :integer
19
29
  t.column :auditable_type, :string
30
+ t.column :association_id, :integer
31
+ t.column :association_type, :string
20
32
  t.column :user_id, :integer
21
33
  t.column :user_type, :string
22
34
  t.column :username, :string
@@ -29,6 +41,7 @@ ActiveRecord::Schema.define(:version => 0) do
29
41
  end
30
42
 
31
43
  add_index :audits, [:auditable_id, :auditable_type], :name => 'auditable_index'
44
+ add_index :audits, [:association_id, :association_type], :name => 'association_index'
32
45
  add_index :audits, [:user_id, :user_type], :name => 'user_index'
33
46
  add_index :audits, :created_at
34
47
  end
data/spec/spec_models.rb CHANGED
@@ -36,6 +36,18 @@ class Company < ActiveRecord::Base
36
36
  acts_as_audited
37
37
  end
38
38
 
39
+ class Owner < ActiveRecord::Base
40
+ set_table_name 'users'
41
+ has_associated_audits
42
+ end
43
+
44
+ class OwnedCompany < ActiveRecord::Base
45
+ set_table_name 'companies'
46
+ belongs_to :owner, :class_name => "Owner"
47
+ attr_accessible :name, :owner # declare attr_accessible before calling aaa
48
+ acts_as_audited :associated_with => :owner
49
+ end
50
+
39
51
  class OnUpdateDestroy < ActiveRecord::Base
40
52
  set_table_name 'companies'
41
53
  acts_as_audited :on => [:update, :destroy]
@@ -0,0 +1,20 @@
1
+ ActiveRecord::Schema.define do
2
+ create_table :audits, :force => true do |t|
3
+ t.column :auditable_id, :integer
4
+ t.column :auditable_type, :string
5
+ t.column :user_id, :integer
6
+ t.column :user_type, :string
7
+ t.column :username, :string
8
+ t.column :action, :string
9
+ t.column :audited_changes, :text
10
+ t.column :version, :integer, :default => 0
11
+ t.column :comment, :string
12
+ t.column :created_at, :datetime
13
+ t.column :remote_address, :string
14
+ end
15
+
16
+ add_index :audits, [:auditable_id, :auditable_type], :name => 'auditable_index'
17
+ add_index :audits, [:user_id, :user_type], :name => 'user_index'
18
+ add_index :audits, :created_at
19
+ end
20
+
@@ -40,4 +40,15 @@ class UpgradeGeneratorTest < Rails::Generators::TestCase
40
40
  assert_match /add_column :audits, :remote_address, :string/, content
41
41
  end
42
42
  end
43
+
44
+ test "should add 'associated_id' and 'associated_type' to audits table" do
45
+ load_schema 4
46
+
47
+ run_generator %w(upgrade)
48
+
49
+ assert_migration "db/migrate/add_association_to_audits.rb" do |content|
50
+ assert_match /add_column :audits, :association_id, :integer/, content
51
+ assert_match /add_column :audits, :association_type, :string/, content
52
+ end
53
+ end
43
54
  end
metadata CHANGED
@@ -6,11 +6,12 @@ version: !ruby/object:Gem::Version
6
6
  - 2
7
7
  - 0
8
8
  - 0
9
- - rc4
10
- version: 2.0.0.rc4
9
+ - rc5
10
+ version: 2.0.0.rc5
11
11
  platform: ruby
12
12
  authors:
13
13
  - Brandon Keepers
14
+ - Kenneth Kalmer
14
15
  autorequire:
15
16
  bindir: bin
16
17
  cert_chain: []
@@ -169,10 +170,12 @@ files:
169
170
  - lib/acts_as_audited/audit_sweeper.rb
170
171
  - lib/acts_as_audited/auditor.rb
171
172
  - lib/generators/acts_as_audited/install_generator.rb
173
+ - lib/generators/acts_as_audited/templates/add_association_to_audits.rb
172
174
  - lib/generators/acts_as_audited/templates/add_comment_to_audits.rb
173
175
  - lib/generators/acts_as_audited/templates/add_remote_address_to_audits.rb
174
176
  - lib/generators/acts_as_audited/templates/install.rb
175
177
  - lib/generators/acts_as_audited/templates/rename_changes_to_audited_changes.rb
178
+ - lib/generators/acts_as_audited/templates/rename_parent_to_association.rb
176
179
  - lib/generators/acts_as_audited/upgrade_generator.rb
177
180
  - spec/acts_as_audited_spec.rb
178
181
  - spec/audit_spec.rb
@@ -195,6 +198,7 @@ files:
195
198
  - test/db/version_1.rb
196
199
  - test/db/version_2.rb
197
200
  - test/db/version_3.rb
201
+ - test/db/version_4.rb
198
202
  - test/install_generator_test.rb
199
203
  - test/test_helper.rb
200
204
  - test/upgrade_generator_test.rb
@@ -256,6 +260,7 @@ test_files:
256
260
  - test/db/version_1.rb
257
261
  - test/db/version_2.rb
258
262
  - test/db/version_3.rb
263
+ - test/db/version_4.rb
259
264
  - test/install_generator_test.rb
260
265
  - test/test_helper.rb
261
266
  - test/upgrade_generator_test.rb