module MongoidVersioning::Versioned

Public Class Methods

included(base) click to toggle source
# File lib/mongoid_versioning/versioned.rb, line 4
def self.included base
  base.extend ClassMethods
  base.class_eval do
    define_model_callbacks :revise, only: [:before, :after]

    field :_version, type: Integer
    field :_based_on_version, type: Integer

    versions_collection.indexes.create_one(
      { _orig_id: 1, _version: 1 }, { unique: true }
    )

    class_attribute :version_max

    before_create :set_initial_version
    after_initialize :revert_id
  end
end

Public Instance Methods

latest_version() click to toggle source
# File lib/mongoid_versioning/versioned.rb, line 71
def latest_version
  self.class.where(_id: id).first
end
previous_versions() click to toggle source
# File lib/mongoid_versioning/versioned.rb, line 75
def previous_versions
  self.class.with(collection: self.class.versions_collection_name).
    where(_orig_id: id).
    ne(_version: latest_version._version).
    desc(:_version)
end
revise(options={}) click to toggle source
# File lib/mongoid_versioning/versioned.rb, line 41
def revise options={}
  return save if new_record?

  return false if performing_validations?(options) && invalid?(:update)
  process_flagged_destroys
  result = run_callbacks(:revise) do
    run_callbacks(:save) do
      run_callbacks(:update) do
        _revise
        true
      end
    end
  end
  post_process_persist(result, options) and self
end
revise!(options={}) click to toggle source
# File lib/mongoid_versioning/versioned.rb, line 57
def revise! options={}
  unless revise(options)
    fail_due_to_validation! unless errors.empty?
    fail_due_to_callback!(:revise!)
  end
  true
end
version(v) click to toggle source
# File lib/mongoid_versioning/versioned.rb, line 82
def version v
  return latest_version if v == _version
  previous_versions.where(_version: v).first
end
versions() click to toggle source

# File lib/mongoid_versioning/versioned.rb, line 67
def versions
  [latest_version].concat(previous_versions)
end