Module: Versioned::InstanceMethods

Defined in:
lib/versioned.rb

Instance Method Summary collapse

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_versionObject



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_changesObject



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

#revertObject



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

Returns:

  • (Boolean)


164
165
166
# File 'lib/versioned.rb', line 164

def reverted?
  version != last_version
end

#versionObject



156
157
158
# File 'lib/versioned.rb', line 156

def version
  @version ||= last_version
end