module MongoidVersioning

Constants

VERSION

Public Instance Methods

_revise() click to toggle source
# File lib/mongoid_versioning/versioned.rb, line 98
def _revise
  loop do
    previous_doc = latest_version

    previous_doc['_orig_id'] = previous_doc['_id']
    previous_doc['_id'] = BSON::ObjectId.new

    current_version = previous_doc._version

    res1 = self.class.versions_collection.find(_orig_id: previous_doc['_orig_id'], _version: previous_doc._version)
    previous_doc[:_version] = current_version if previous_doc[:_version].nil?
    self.class.versions_collection.insert_one(previous_doc.as_document) if res1.count == 0

    self._based_on_version = _version || current_version
    self._version = current_version+1

    res2 = self.class.collection.find(_id: id, _version: current_version).update_one(self.as_document)



    # replay flow if someone else updated the document before us
    break unless res2.n != 1
  end

  if version_max.present? && versions.length > version_max
    self.class.versions_collection.find(_orig_id: self.id, _version: versions.min_by(&:_version)._version).delete_many
  end
end
revert_id() click to toggle source
# File lib/mongoid_versioning/versioned.rb, line 93
def revert_id
  return unless self['_orig_id']
  self._id = self['_orig_id']
end