module Mongoid::SimpleAudit::Helper

Public Instance Methods

render_audits(audited_model) click to toggle source

Render the change log for the given audited model

# File lib/mongoid/simple_audit/helper.rb, line 8
def render_audits(audited_model)
  return '' if !audited_model.respond_to?(:audit) || audited_model.audit.nil?
  audits = (audited_model.audit.modifications).dup.sort{|a,b| b.created_at <=> a.created_at}
  res = ''
  audits.each_with_index do |audit, index|
    older_audit = audits[index + 1]
    res += content_tag(:div, :class => 'audit') do
      content_tag(:div, audit.action, :class => "action #{audit.action}") +
      content_tag(:div, audit.username, :class => "user") + 
      content_tag(:div, l(audit.created_at), :class => "timestamp") + 
      content_tag(:div, :class => 'changes') do
        changes = if older_audit.present?
          audit.delta(older_audit).sort{|x,y| audited_model.class.human_attribute_name(x.first) <=> audited_model.class.human_attribute_name(y.first)}.collect do |k, v|                
            next if k.to_s == 'created_at' || k.to_s == 'updated_at'
            "\n" + 
            audited_model.class.human_attribute_name(k) +
            ":" +
            content_tag(:span, (v.last ? v.last.to_s.force_encoding("UTF-8") : '' ), :class => 'current') +
            content_tag(:span, (v.first ? v.first.to_s.force_encoding("UTF-8") : '' ), :class => 'previous')
          end
        else
          audit.change_log.sort{|x,y| audited_model.class.human_attribute_name(x.first) <=> audited_model.class.human_attribute_name(y.first)}.reject{|k, v| v.blank?}.collect {|k, v| "\n#{audited_model.class.human_attribute_name(k)}: #{v}"}
        end
        raw changes.join
      end        
    end
  end
  raw res
end