Module: Versioned::InstanceMethods
- Defined in:
- lib/versioned.rb
Instance Method Summary collapse
- #changes_between(from, to) ⇒ Object
- #last_version ⇒ Object
- #latest_changes ⇒ Object
- #reload_with_versions(*args) ⇒ Object
- #retrieve_version(n) ⇒ Object
- #revert ⇒ Object
- #revert_to(value) ⇒ Object
- #revert_to!(value) ⇒ Object
- #reverted? ⇒ Boolean
- #version ⇒ Object
Instance Method Details
#changes_between(from, to) ⇒ Object
171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 |
# File 'lib/versioned.rb', line 171 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 chain.inject({}) do |changes, version| version.changes.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
158 159 160 |
# File 'lib/versioned.rb', line 158 def last_version @last_version ||= versions.inject(1){|max, version| version.number > max ? version.number : max} end |
#latest_changes ⇒ Object
218 219 220 221 |
# File 'lib/versioned.rb', line 218 def latest_changes return {} if version.nil? versions.at(version).changes end |
#reload_with_versions(*args) ⇒ Object
166 167 168 169 |
# File 'lib/versioned.rb', line 166 def reload_with_versions(*args) reset_version reload_without_versions(*args) end |
#retrieve_version(n) ⇒ Object
194 195 196 197 198 |
# File 'lib/versioned.rb', line 194 def retrieve_version n versions.find_by_number(n).changes.each do |n,v| self.send("#{n.to_sym}=",v.first) end end |
#revert ⇒ Object
190 191 192 |
# File 'lib/versioned.rb', line 190 def revert revert_to self.versions.at(self.version).previous end |
#revert_to(value) ⇒ Object
200 201 202 203 204 205 206 207 208 209 210 |
# File 'lib/versioned.rb', line 200 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
212 213 214 215 216 |
# File 'lib/versioned.rb', line 212 def revert_to!(value) revert_to(value) reset_version if saved = save saved end |
#reverted? ⇒ Boolean
162 163 164 |
# File 'lib/versioned.rb', line 162 def reverted? version != last_version end |
#version ⇒ Object
154 155 156 |
# File 'lib/versioned.rb', line 154 def version @version ||= last_version end |