def audited(options = {})
return if self.included_modules.include?(Audited::Auditor::AuditedInstanceMethods)
options = { :protect => accessible_attributes.blank? }.merge(options)
class_attribute :non_audited_columns, :instance_writer => false
class_attribute :auditing_enabled, :instance_writer => false
class_attribute :audit_associated_with, :instance_writer => false
if options[:only]
except = self.column_names - options[:only].flatten.map(&:to_s)
else
except = default_ignored_attributes + Audited.ignored_attributes
except |= Array(options[:except]).collect(&:to_s) if options[:except]
end
self.non_audited_columns = except
self.audit_associated_with = options[:associated_with]
if options[:comment_required]
validates_presence_of :audit_comment, :if => :auditing_enabled
before_destroy :require_comment
end
attr_accessor :audit_comment
unless accessible_attributes.blank? || options[:protect]
attr_accessible :audit_comment
end
has_many :audits, :as => :auditable, :class_name => Audited.audit_class.name
attr_protected :audit_ids if options[:protect]
Audited.audit_class.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))
before_destroy :audit_destroy if !options[:on] || (options[:on] && options[:on].include?(:destroy))
define_callbacks :audit
set_callback :audit, :after, :after_audit, :if => lambda { self.respond_to?(:after_audit) }
attr_accessor :version
extend Audited::Auditor::AuditedClassMethods
include Audited::Auditor::AuditedInstanceMethods
self.auditing_enabled = true
end