Module: PaperTrailManager::ChangesHelper
- Defined in:
- app/helpers/paper_trail_manager/changes_helper.rb
Instance Method Summary collapse
-
#change_item_link(version) ⇒ Object
Returns HTML link for the item stored in the version, e.g.
- #change_item_types ⇒ Object
-
#change_title_for(version) ⇒ Object
Returns string title for the versioned record.
-
#changes_for(version) ⇒ Object
Return an hash of changes for the given
PaperTrail::Version
record. -
#text_or_nil(object) ⇒ Object
Return HTML representing the
object
, which is either its text or a stylized “nil”. - #version_reify(version) ⇒ Object
Instance Method Details
#change_item_link(version) ⇒ Object
Returns HTML link for the item stored in the version, e.g. a link to a Company record stored in the version.
68 69 70 71 72 73 74 |
# File 'app/helpers/paper_trail_manager/changes_helper.rb', line 68 def change_item_link(version) if (url = change_item_url(version)) link_to(change_title_for(version), url, class: 'change_item') else content_tag(:span, change_title_for(version), class: 'change_item') end end |
#change_item_types ⇒ Object
61 62 63 64 65 |
# File 'app/helpers/paper_trail_manager/changes_helper.rb', line 61 def change_item_types ActiveRecord::Base.subclasses.select do |klass| klass.include?(PaperTrail::Model::InstanceMethods) end.map(&:to_s) end |
#change_title_for(version) ⇒ Object
Returns string title for the versioned record.
50 51 52 53 54 55 56 57 58 59 |
# File 'app/helpers/paper_trail_manager/changes_helper.rb', line 50 def change_title_for(version) if PaperTrailManager.item_name_method record = version_reify(version) || version.next.try(:reify) || version.item name = record.send(PaperTrailManager.item_name_method) else name = "#{version.item_type} #{version.item_id}" end h(name) end |
#changes_for(version) ⇒ Object
Return an hash of changes for the given PaperTrail::Version
record. The resulting data structure is a hash whose keys are the names of changed columns and values containing a hash with current and previous value. E.g.,:
{
"my_column_name" => {
:previous => "past value",
:current => "current_value",
},
"title" => {
:previous => "puppies",
:current => "kittens",
},
...
}
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'app/helpers/paper_trail_manager/changes_helper.rb', line 29 def changes_for(version) case version.event when 'create', 'update' return {} unless version.changeset version.changeset.inject({}) do |changes, (attr, (prev, curr))| changes.store(attr, { previous: prev, current: curr }) && changes end when 'destroy' record = version_reify(version) return {} unless record record.attributes.reject { |_k, v| v.nil? }.inject({}) do |changes, (attr, value)| changes.store(attr, { previous: value, current: nil }) && changes end else raise ArgumentError, "Unknown event: #{version.event}" end end |
#text_or_nil(object) ⇒ Object
Return HTML representing the object
, which is either its text or a stylized “nil”.
6 7 8 9 10 11 12 |
# File 'app/helpers/paper_trail_manager/changes_helper.rb', line 6 def text_or_nil(object) if object.nil? content_tag('em', 'nil') else h(object) end end |
#version_reify(version) ⇒ Object
76 77 78 79 80 |
# File 'app/helpers/paper_trail_manager/changes_helper.rb', line 76 def version_reify(version) version.reify rescue ArgumentError nil end |