Module: TrackChanges::DiffHelper
- Defined in:
- app/helpers/track_changes/diff_helper.rb
Instance Method Summary collapse
- #diff_action(diff) ⇒ Object
-
#diff_change_sentence(diff, field, changes, link_models = []) ⇒ Object
Generate a human readable sentence for a change in a TrackChanges::Diff.
- #link_diff_field_value(value, link_models = []) ⇒ Object
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) || content_tag(:span, 'DELETED', :class => 'deleted', :title => "This #{field_name} has been deleted") if from.present? to = reflection.klass.find_by_id(to) || content_tag(:span, 'DELETED', :class => 'deleted', :title => "This #{field_name} has been deleted") if to.present? end if from.blank? content_tag(:span, field_name, :class => 'field_name') + " set to " + content_tag(:span, link_diff_field_value(to, link_models), :class => 'field_value') elsif to.blank? content_tag(:span, field_name, :class => 'field_name') + " removed" else content_tag(:span, field_name, :class => 'field_name') + " changed from " + content_tag(:span, link_diff_field_value(from, link_models), :class => 'field_value') + " to " + content_tag(:span, link_diff_field_value(to, link_models), :class => 'field_value') end end |
#link_diff_field_value(value, link_models = []) ⇒ Object
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 |