Module: LaserLemon::VestalVersions::InstanceMethods
- Defined in:
- lib/vestal_versions.rb
Instance Method Summary collapse
- #changes_between(from, to) ⇒ Object
- #last_version ⇒ Object
- #latest_changes ⇒ Object
- #reload_with_versions(*args) ⇒ Object
- #revert_to(value) ⇒ Object
- #revert_to!(value) ⇒ Object
- #reverted? ⇒ Boolean
- #version ⇒ Object
Instance Method Details
#changes_between(from, to) ⇒ Object
91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 |
# File 'lib/vestal_versions.rb', line 91 def changes_between(from, to) from_number, to_number = versions.number_at(from), versions.number_at(to) return {} if from_number == to_number chain = versions.between(from_number, to_number) return {} if chain.empty? backward = chain.first > chain.last backward ? chain.pop : chain.shift = %w(created_at created_on updated_at updated_on) chain.inject({}) do |changes, version| version.changes.except(*).each do |attribute, change| change.reverse! if backward new_change = [changes.fetch(attribute, change).first, change.last] changes.update(attribute => new_change) end changes end end |
#last_version ⇒ Object
78 79 80 |
# File 'lib/vestal_versions.rb', line 78 def last_version @last_version ||= versions.maximum(:number) end |
#latest_changes ⇒ Object
130 131 132 133 |
# File 'lib/vestal_versions.rb', line 130 def latest_changes return {} if version.nil? || version == 1 versions.at(version).changes end |
#reload_with_versions(*args) ⇒ Object
86 87 88 89 |
# File 'lib/vestal_versions.rb', line 86 def reload_with_versions(*args) reset_version reload_without_versions(*args) end |
#revert_to(value) ⇒ Object
112 113 114 115 116 117 118 119 120 121 122 |
# File 'lib/vestal_versions.rb', line 112 def revert_to(value) to_number = versions.number_at(value) changes = changes_between(version, to_number) return version if changes.empty? changes.each do |attribute, change| write_attribute(attribute, change.last) end reset_version(to_number) end |
#revert_to!(value) ⇒ Object
124 125 126 127 128 |
# File 'lib/vestal_versions.rb', line 124 def revert_to!(value) revert_to(value) reset_version if saved = save saved end |
#reverted? ⇒ Boolean
82 83 84 |
# File 'lib/vestal_versions.rb', line 82 def reverted? version != last_version end |
#version ⇒ Object
74 75 76 |
# File 'lib/vestal_versions.rb', line 74 def version @version ||= last_version end |