module Mongoid::Verbalize::Versioning

Private Instance Methods

all_verbalized_field_values() click to toggle source
# File lib/mongoid/verbalize/versioning.rb, line 67
def all_verbalized_field_values
  [self.class.verbalized_field_values(self) + self.class.verbalized_children(self).map do |child|
    self.class.verbalized_field_values(child)
  end].flatten
end
create_new_version() click to toggle source
# File lib/mongoid/verbalize/versioning.rb, line 39
def create_new_version
  return if embedded? # Only do this on the root document

  # Do a first pass to see if any verbalized field has changed
  any_field_changed = false
  iterate_all_verbalized_fields do |document, field|
    any_field_changed = true if field.demongoize(document.read_attribute(field.name)).changed?
  end
  return unless any_field_changed

  run_callbacks :create_version do
    # Calculate new version number
    previous_version = self.verbalized_versions.last.version if self.verbalized_versions.last.present?
    next_version_number = previous_version.present? ? previous_version + 1 : 0
    self.verbalized_versions.build(:version => next_version_number)
  
    # Apply this new version number to verbalized fields
    iterate_all_verbalized_fields do |document, field|
      field_value = field.demongoize(document.read_attribute(field.name))
      field_value.prepare_for_save(next_version_number)
      document.write_attribute(field.name, field_value)
    end
  end

  # Reset _children so that Mongoid persists verbalized_versions correctly
  @_children = nil
end
current_version() click to toggle source
# File lib/mongoid/verbalize/versioning.rb, line 80
def current_version
  self.verbalized_versions.last.version
end
iterate_all_verbalized_fields(&block) click to toggle source
# File lib/mongoid/verbalize/versioning.rb, line 73
def iterate_all_verbalized_fields(&block)
  self.class.iterate_verbalized_fields(self, &block)
  self.class.verbalized_children(self).each do |child|
    self.class.iterate_verbalized_fields(child, &block)
  end
end