Module: CollectiveIdea::Acts::Audited::ClassMethods

Defined in:
lib/acts_as_audited.rb

Instance Method Summary collapse

Instance Method Details

#acts_as_audited(options = {}) ⇒ Object

Configuration options

  • only - Only audit the given attributes

  • except - Excludes fields from being saved in the audit log. By default, acts_as_audited will audit all but these fields:

    [self.primary_key, inheritance_column, 'lock_version', 'created_at', 'updated_at']
    

    You can add to those by passing one or an array of fields to skip.

    class User < ActiveRecord::Base
      acts_as_audited :except => :password
    end
    
  • protect - If your model uses attr_protected, set this to false to prevent Rails from raising an error. If you declare attr_accessibe before calling acts_as_audited, it will automatically default to false. You only need to explicitly set this if you are calling attr_accessible after.

  • require_comment - Ensures that audit_comment is supplied before any create, update or destroy operation.

    class User < ActiveRecord::Base
      acts_as_audited :protect => false
      attr_accessible :name
    end
    


70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
# File 'lib/acts_as_audited.rb', line 70

def acts_as_audited(options = {})
  # don't allow multiple calls
  return if self.included_modules.include?(CollectiveIdea::Acts::Audited::InstanceMethods)

  options = {:protect => accessible_attributes.nil?}.merge(options)

  class_inheritable_reader :non_audited_columns
  class_inheritable_reader :auditing_enabled
  
  if options[:only]
    except = self.column_names - options[:only].flatten.map(&:to_s)
  else
    except = [self.primary_key, inheritance_column, 'lock_version',
      'created_at', 'updated_at', 'created_on', 'updated_on']
    except |= Array(options[:except]).collect(&:to_s) if options[:except]
  end
  write_inheritable_attribute :non_audited_columns, except

  if options[:comment_required]
    validates_presence_of :audit_comment
    before_destroy :require_comment
  end

  attr_accessor :audit_comment
  unless accessible_attributes.nil? || options[:protect]
    attr_accessible :audit_comment
  end

  has_many :audits, :as => :auditable, :order => "#{Audit.quoted_table_name}.audit_version"
  attr_protected :audit_ids if options[:protect]
  Audit.audited_class_names << self.to_s

  after_create  :audit_create if !options[:on] || (options[:on] && options[:on].include?(:create))
  before_update :audit_update if !options[:on] || (options[:on] && options[:on].include?(:update))
  after_destroy :audit_destroy if !options[:on] || (options[:on] && options[:on].include?(:destroy))

  attr_accessor :audit_version

  extend CollectiveIdea::Acts::Audited::SingletonMethods
  include CollectiveIdea::Acts::Audited::InstanceMethods

  write_inheritable_attribute :auditing_enabled, true
end