# File lib/audited/auditor.rb, line 46
      def audited(options = {})
        # don't allow multiple calls
        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 and set an after_audit callback. This might be useful if you want
        # to notify a party after the audit has been created.
        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