Module: TrackChanges::DiffHelper

Defined in:
app/helpers/track_changes/diff_helper.rb

Instance Method Summary collapse

Instance Method Details

#diff_action(diff) ⇒ Object



3
4
5
6
7
8
9
10
11
12
# File 'app/helpers/track_changes/diff_helper.rb', line 3

def diff_action(diff)
  case diff.action
  when 'create'
    'added'
  when 'update'
    'updated'
  when 'destroy'
    'deleted'
  end
end

#diff_change_sentence(diff, field, changes, link_models = []) ⇒ Object



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'app/helpers/track_changes/diff_helper.rb', line 14

def diff_change_sentence(diff, field, changes, link_models = [])
  from, to = changes.is_a?(Array) ? changes : [nil, changes]
  # return if diff.action == 'destroy'
  return if from.blank? && to.blank?

  if record = diff.record
    field_name = diff.record.class.human_attribute_name(field)
    reflection = diff.record.class.reflections.values.detect {|reflection| reflection.foreign_key == field.to_s }
  end

  if reflection
    from = reflection.klass.find(from) if from.present?
    to   = reflection.klass.find(to)   if to.present?
  end

  if from.blank?
    (:span, field_name, :class => 'field_name') + " set to " + (:span, link_diff_field_value(to, link_models), :class => 'field_value')
  elsif to.blank?
    (:span, field_name, :class => 'field_name') + " removed"
  else
    (:span, field_name, :class => 'field_name') + " changed from " + (:span, link_diff_field_value(from, link_models), :class => 'field_value') + " to " + (:span, link_diff_field_value(to, link_models), :class => 'field_value')
  end
end


38
39
40
41
42
43
44
45
46
47
# File 'app/helpers/track_changes/diff_helper.rb', line 38

def link_diff_field_value(value, link_models = [])
  case value
  when Array
    value.collect{|v| link_diff_field_value(v, link_models) }.to_sentence.html_safe
  when *link_models
    link_to(value.to_s, value)
  else
    value
  end
end