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
173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 |
# File 'lib/versioned.rb', line 173 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
160 161 162 |
# File 'lib/versioned.rb', line 160 def last_version @last_version ||= versions.inject(1){|max, version| version.number > max ? version.number : max} end |
#latest_changes ⇒ Object
220 221 222 223 |
# File 'lib/versioned.rb', line 220 def latest_changes return {} if version.nil? versions.at(version).changes end |
#reload_with_versions(*args) ⇒ Object
168 169 170 171 |
# File 'lib/versioned.rb', line 168 def reload_with_versions(*args) reset_version reload_without_versions(*args) end |
#retrieve_version(n) ⇒ Object
196 197 198 199 200 |
# File 'lib/versioned.rb', line 196 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
192 193 194 |
# File 'lib/versioned.rb', line 192 def revert revert_to self.versions.at(self.version).previous end |
#revert_to(value) ⇒ Object
202 203 204 205 206 207 208 209 210 211 212 |
# File 'lib/versioned.rb', line 202 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
214 215 216 217 218 |
# File 'lib/versioned.rb', line 214 def revert_to!(value) revert_to(value) reset_version if saved = save saved end |
#reverted? ⇒ Boolean
164 165 166 |
# File 'lib/versioned.rb', line 164 def reverted? version != last_version end |
#version ⇒ Object
156 157 158 |
# File 'lib/versioned.rb', line 156 def version @version ||= last_version end |