Module: SimpleAudit::Helper

Defined in:
lib/simple_audit/helper.rb

Instance Method Summary collapse

Instance Method Details

#render_audits(audited_model) ⇒ Object

Render the change log for the given audited model



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/simple_audit/helper.rb', line 6

def render_audits(audited_model)
  return '' unless audited_model.respond_to?(:audits)
  audits = (audited_model.audits || []).dup.sort{|a,b| b.created_at <=> a.created_at}
  res = ''
  audits.each_with_index do |audit, index|
    older_audit = audits[index + 1]
    res += (:div, :class => 'audit') do
      (:div, audit.action, :class => "action #{audit.action}") +
      (:div, audit.username, :class => "user") + 
      (:div, l(audit.created_at), :class => "timestamp") + 
      (: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) +
            ":" +
            (:span, v.last, :class => 'current') +
            (:span, v.first, :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