module Audited::Audit::ClassMethods

def as_user(user, &block)

for background operations that require audit information.
by +user+. This method is hopefully threadsafe, making it ideal
All audits made during the block called will be recorded as made
def as_user(user, &block)
  Thread.current[:audited_user] = user
  yieldval = yield
  Thread.current[:audited_user] = nil
  yieldval
end

def assign_revision_attributes(record, attributes)

Other tags:
    Private: -
def assign_revision_attributes(record, attributes)
  attributes.each do |attr, val|
    record = record.dup if record.frozen?
    if record.respond_to?("#{attr}=")
      record.attributes.has_key?(attr.to_s) ?
        record[attr] = val :
        record.send("#{attr}=", val)
    end
  end
  record
end

def audited_classes

Returns the list of classes that are being audited
def audited_classes
  audited_class_names.map(&:constantize)
end

def reconstruct_attributes(audits)

Other tags:
    Private: -
def reconstruct_attributes(audits)
  attributes = {}
  result = audits.collect do |audit|
    attributes.merge!(audit.new_attributes).merge!(:version => audit.version)
    yield attributes if block_given?
  end
  block_given? ? result : attributes
end

def setup_audit

def setup_audit
  belongs_to :auditable,  :polymorphic => true
  belongs_to :user,       :polymorphic => true
  belongs_to :associated, :polymorphic => true
  before_create :set_version_number, :set_audit_user
  cattr_accessor :audited_class_names
  self.audited_class_names = Set.new
  attr_accessible :action, :audited_changes, :comment, :associated
end