module VestalVersions::Reversion::InstanceMethods

Provides the base instance methods required to revert a versioned instance.

Public Instance Methods

revert_to(value) click to toggle source

Accepts a value corresponding to a specific version record, builds a history of changes between that version and the current version, and then iterates over that history updating the object's attributes until the it's reverted to its prior state.

The single argument should adhere to one of the formats as documented in the at method of VestalVersions::Versions.

After the object is reverted to the target version, it is not saved. In order to save the object after the reversion, use the revert_to! method.

The version number of the object will reflect whatever version has been reverted to, and the return value of the revert_to method is also the target version number.

# File lib/vestal_versions/reversion.rb, line 29
def revert_to(value)
  to_number = versions.number_at(value)

  changes_between(version, to_number).each do |attribute, change|
    write_attribute(attribute, change.last)
  end

  reset_version(to_number)
end
revert_to!(value) click to toggle source

Behaves similarly to the revert_to method except that it automatically saves the record after the reversion. The return value is the success of the save.

# File lib/vestal_versions/reversion.rb, line 41
def revert_to!(value)
  revert_to(value)
  reset_version if saved = save
  saved
end
reverted?() click to toggle source

Returns a boolean specifying whether the object has been reverted to a previous version or if the object represents the latest version in the version history.

# File lib/vestal_versions/reversion.rb, line 49
def reverted?
  version != last_version
end
version() click to toggle source

Returns the current version number for the versioned object.

# File lib/vestal_versions/reversion.rb, line 13
def version
  @version ||= last_version
end

Private Instance Methods

last_version() click to toggle source

Returns the number of the last created version in the object's version history.

If no associated versions exist, the object is considered at version 1.

# File lib/vestal_versions/reversion.rb, line 57
def last_version
  @last_version ||= versions.maximum(:number) || 1
end
reset_version(version = nil) click to toggle source

Clears the cached version number instance variables so that they can be recalculated. Useful after a new version is created.

# File lib/vestal_versions/reversion.rb, line 63
def reset_version(version = nil)
  @last_version = nil if version.nil?
  @version = version
end