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

Generate a human readable sentence for a change in a TrackChanges::Diff

diff - a TrackChanges::Diff object field - the specific field of the diff (e.g. collection_id) changes - an array of the previous and current value for the field link_models - an array of classes of models that should generate as in-sentence links



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'app/helpers/track_changes/diff_helper.rb', line 22

def diff_change_sentence(diff, field, changes, link_models = [])
  from, to = changes.is_a?(Array) ? changes : [nil, changes]

  from.reject!(&:blank?) if from.is_a?(Array)
  to.reject!(&:blank?) if to.is_a?(Array)

  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_by_id(from) || (:span, 'DELETED', :class => 'deleted', :title => "This #{field_name} has been deleted") if from.present?
    to   = reflection.klass.find_by_id(to)   || (:span, 'DELETED', :class => 'deleted', :title => "This #{field_name} has been deleted") 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


49
50
51
52
53
54
55
56
57
58
# File 'app/helpers/track_changes/diff_helper.rb', line 49

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