module VestalVersions::Changes::InstanceMethods

Methods available to versioned ActiveRecord::Base instances in order to manage changes used for version creation.

Public Instance Methods

changes_between(from, to) click to toggle source

Collects an array of changes from a record's versions between the given range and compiles them into one summary hash of changes. The from and to arguments can each be either a version number, a symbol representing an association proxy method, a string representing a version tag or a version object itself.

# File lib/vestal_versions/changes.rb, line 22
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).reject(&:initial?)
  return {} if chain.empty?

  backward = from_number > to_number
  backward ? chain.pop : chain.shift unless from_number == 1 || to_number == 1

  chain.inject({}) do |changes, version|
    changes.append_changes!(backward ? version.changes.reverse_changes : version.changes)
  end
end

Private Instance Methods

incremental_version_changes() click to toggle source

Stores the incremental changes that are appended to the cumulative changes before version creation. Incremental changes are reset when the record is saved because they represent a subset of the dirty attribute changes, which are reset upon save.

# File lib/vestal_versions/changes.rb, line 53
def incremental_version_changes
  changes.slice(*versioned_columns)
end
merge_version_changes() click to toggle source

Before a new version is created, the newly-changed attributes are appended onto a hash of previously-changed attributes. Typically the previous changes will be empty, except in the case that a control block is used where versions are to be merged. See VestalVersions::Control for more information.

# File lib/vestal_versions/changes.rb, line 41
def merge_version_changes
  version_changes.append_changes!(incremental_version_changes)
end
reset_version_changes() click to toggle source

Simply resets the cumulative changes after version creation.

# File lib/vestal_versions/changes.rb, line 58
def reset_version_changes
  @version_changes = nil
end
version_changes() click to toggle source

Stores the cumulative changes that are eventually used for version creation.

# File lib/vestal_versions/changes.rb, line 46
def version_changes
  @version_changes ||= {}
end