acts_as_audited 1.0.2 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/README CHANGED
@@ -21,30 +21,20 @@ The purpose of this fork is to store both the previous values and the changed va
21
21
 
22
22
  == Usage
23
23
 
24
- If you're using acts_as_audited within Rails, you can simply declare which models should be audited. acts_as_audited can also automatically record the user that made the change if your controller has a <tt>current_user</tt> method.
25
-
26
- class ApplicationController < ActionController::Base
27
- audit User, List, Item => {:except => :password}
28
- protected
29
- def current_user
30
- @user ||= User.find(session[:user])
31
- end
32
- end
33
-
34
- To get auditing outside of Rails you can explicitly declare <tt>acts_as_audited</tt> on your models:
24
+ Declare <tt>acts_as_audited</tt> on your models:
35
25
 
36
26
  class User < ActiveRecord::Base
37
27
  acts_as_audited :except => [:password, :mistress]
38
28
  end
29
+
30
+ Within a web request, will automatically record the user that made the change if your controller has a <tt>current_user</tt> method.
39
31
 
40
- To record a user in the audits when the sweepers are not available, you can use <tt>as_user</tt>:
32
+ To record a user in the audits outside of a web request, you can use <tt>as_user</tt>:
41
33
 
42
- Audit.as_user( user ) do
34
+ Audit.as_user(user) do
43
35
  # Perform changes on audited models
44
36
  end
45
37
 
46
- See http://opensoul.org/2006/07/21/acts_as_audited for more information.
47
-
48
38
  == Caveats
49
39
 
50
40
  If your model declares +attr_accessible+ after +acts_as_audited+, you need to set +:protect+ to false. acts_as_audited uses +attr_protected+ internally to prevent malicious users from unassociating your audits, and Rails does not allow both +attr_protected+ and +attr_accessible+. It will default to false if +attr_accessible+ is called before +acts_as_audited+, but needs to be explicitly set if it is called after.
@@ -54,18 +44,15 @@ If your model declares +attr_accessible+ after +acts_as_audited+, you need to se
54
44
  attr_accessible :name
55
45
  end
56
46
 
57
- === ActiveScaffold
58
-
59
- Many users have also reported problems with acts_as_audited and ActiveScaffold, which appears to be caused by a limitation in ActiveScaffold not supporting polymorphic associations. To get it to work with ActiveScaffold:
60
-
61
- class ApplicationController < ActionController::Base
62
- audit MyModel, :only => [:create, :update, :destroy]
63
- end
64
-
65
47
  == Compatability
66
48
 
67
49
  acts_as_audited works with Rails 2.1 or later.
68
50
 
51
+ == Getting Help
52
+
53
+ Join the mailing list for getting help or offering suggestions:
54
+ http://groups.google.com/group/acts_as_audited
55
+
69
56
  == Contributing
70
57
 
71
58
  Contributions are always welcome. Checkout the latest code on GitHub:
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.0.2
1
+ 1.1.0
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{acts_as_audited}
8
- s.version = "1.0.2"
8
+ s.version = "1.1.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Brandon Keepers"]
12
- s.date = %q{2009-10-29}
12
+ s.date = %q{2009-11-01}
13
13
  s.email = %q{brandon@opensoul.org}
14
14
  s.extra_rdoc_files = [
15
15
  "LICENSE",
@@ -1,65 +1,36 @@
1
-
2
1
  module CollectiveIdea #:nodoc:
3
2
  module ActionController #:nodoc:
4
3
  module Audited #:nodoc:
4
+ def audit(*models)
5
+ ActiveSupport::Deprecation.warn("#audit is deprecated. Declare #acts_as_audited in your models.", caller)
6
+
7
+ options = models.extract_options!
8
+
9
+ # Parse the options hash looking for classes
10
+ options.each_key do |key|
11
+ models << [key, options.delete(key)] if key.is_a?(Class)
12
+ end
5
13
 
6
- def self.included(base) # :nodoc:
7
- base.extend ClassMethods
8
- end
9
-
10
- module ClassMethods
11
- # Declare models that should be audited in your controller
12
- #
13
- # class ApplicationController < ActionController::Base
14
- # audit User, Widget
15
- # end
16
- #
17
- # You can optionally pass options for each model to be audited:
18
- #
19
- # audit User, Widget, Task => { :except => :position }
20
- #
21
- # NOTE: Models which do not have options must be listed first in the
22
- # call to <tt>audit</tt>.
23
- #
24
- # See <tt>CollectiveIdea::Acts::Audited::ClassMethods#acts_as_audited</tt>
25
- # for configuration options
26
- #
27
- # You can also specify an options hash which will be passed on to
28
- # Rails' cache_sweeper call:
29
- #
30
- # audit User, :only => [:create, :edit, :destroy],
31
- #
32
- def audit(*models)
33
- options = models.extract_options!
34
-
35
- # Parse the options hash looking for classes
36
- options.each_key do |key|
37
- models << [key, options.delete(key)] if key.is_a?(Class)
38
- end
39
-
40
- models.each do |(model, model_options)|
41
- model.send :acts_as_audited, model_options || {}
42
- end
43
-
44
- class_eval do
45
- # prevent observer from being registered multiple times
46
- Audit.delete_observer(AuditSweeper.instance)
47
- Audit.add_observer(AuditSweeper.instance)
48
- cache_sweeper :audit_sweeper, options
49
- end
14
+ models.each do |(model, model_options)|
15
+ model.send :acts_as_audited, model_options || {}
50
16
  end
51
17
  end
52
-
53
18
  end
54
19
  end
55
20
  end
56
21
 
57
22
  class AuditSweeper < ActionController::Caching::Sweeper #:nodoc:
58
- def before_create(record)
59
- record.user ||= current_user
23
+ def before_create(audit)
24
+ audit.user ||= current_user
60
25
  end
61
26
 
62
27
  def current_user
63
28
  controller.send :current_user if controller.respond_to?(:current_user, true)
64
29
  end
65
30
  end
31
+
32
+ ActionController::Base.class_eval do
33
+ extend CollectiveIdea::ActionController::Audited
34
+ cache_sweeper :audit_sweeper
35
+ end
36
+ Audit.add_observer(AuditSweeper.instance)
@@ -82,9 +82,9 @@ module CollectiveIdea #:nodoc:
82
82
  attr_protected :audit_ids if options[:protect]
83
83
  Audit.audited_class_names << self.to_s
84
84
 
85
- after_create :audit_create_callback
86
- before_update :audit_update_callback
87
- after_destroy :audit_destroy_callback
85
+ after_create :audit_create
86
+ before_update :audit_update
87
+ after_destroy :audit_destroy
88
88
 
89
89
  attr_accessor :version
90
90
 
@@ -200,14 +200,6 @@ module CollectiveIdea #:nodoc:
200
200
  def write_audit(attrs)
201
201
  self.audits.create attrs if auditing_enabled
202
202
  end
203
-
204
- CALLBACKS.each do |attr_name|
205
- alias_method "#{attr_name}_callback".to_sym, attr_name
206
- end
207
-
208
- def empty_callback #:nodoc:
209
- end
210
-
211
203
  end # InstanceMethods
212
204
 
213
205
  module SingletonMethods
@@ -236,22 +228,6 @@ module CollectiveIdea #:nodoc:
236
228
  write_inheritable_attribute :auditing_enabled, true
237
229
  end
238
230
 
239
- def disable_auditing_callbacks
240
- class_eval do
241
- CALLBACKS.each do |attr_name|
242
- alias_method "#{attr_name}_callback", :empty_callback
243
- end
244
- end
245
- end
246
-
247
- def enable_auditing_callbacks
248
- class_eval do
249
- CALLBACKS.each do |attr_name|
250
- alias_method "#{attr_name}_callback".to_sym, attr_name
251
- end
252
- end
253
- end
254
-
255
231
  # All audit operations during the block are recorded as being
256
232
  # made by +user+. This is not model specific, the method is a
257
233
  # convenience wrapper around #Audit.as_user.
data/rails/init.rb CHANGED
@@ -5,5 +5,4 @@ ActiveRecord::Base.send :include, CollectiveIdea::Acts::Audited
5
5
 
6
6
  if defined?(ActionController) and defined?(ActionController::Base)
7
7
  require 'acts_as_audited/audit_sweeper'
8
- ActionController::Base.send :include, CollectiveIdea::ActionController::Audited
9
8
  end
@@ -295,15 +295,6 @@ module CollectiveIdea
295
295
  User.without_auditing { User.create(:name => 'Brandon') }
296
296
  end.should_not change { Audit.count }
297
297
  end
298
-
299
- should "not save an audit when callbacks are disabled" do
300
- begin
301
- User.disable_auditing_callbacks
302
- lambda { create_user }.should_not change { Audit.count }
303
- ensure
304
- User.enable_auditing_callbacks
305
- end
306
- end
307
298
  end
308
299
 
309
300
  context "attr_protected and attr_accessible" do
@@ -1,8 +1,6 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/test_helper')
2
2
 
3
3
  class AuditsController < ActionController::Base
4
- audit Company, User
5
-
6
4
  def audit
7
5
  @company = Company.create
8
6
  render :nothing => true
@@ -20,11 +18,6 @@ AuditsController.view_paths = [File.dirname(__FILE__)]
20
18
  ActionController::Routing::Routes.draw {|m| m.connect ':controller/:action/:id' }
21
19
 
22
20
  class AuditsControllerTest < ActionController::TestCase
23
-
24
- should "call acts as audited on non audited models" do
25
- Company.should be_kind_of(CollectiveIdea::Acts::Audited::SingletonMethods)
26
- end
27
-
28
21
  should "audit user" do
29
22
  user = @controller.send(:current_user=, create_user)
30
23
  lambda { post :audit }.should change { Audit.count }
@@ -35,5 +28,4 @@ class AuditsControllerTest < ActionController::TestCase
35
28
  user = @controller.send(:current_user=, create_user)
36
29
  lambda { post :update_user }.should_not change { Audit.count }
37
30
  end
38
-
39
31
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: acts_as_audited
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brandon Keepers
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-10-29 00:00:00 -04:00
12
+ date: 2009-11-01 00:00:00 -04:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency