Module: MongoidVersioning::Versioned

Defined in:
lib/mongoid_versioning/versioned.rb

Defined Under Namespace

Modules: ClassMethods

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(base) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 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

    collection.database[versions_collection_name].indexes.create(
      { _orig_id: 1, _version: 1 }, { unique: true }
    )

    after_initialize :revert_id
  end
end

Instance Method Details

#latest_versionObject



44
45
46
# File 'lib/mongoid_versioning/versioned.rb', line 44

def latest_version
  self.class.where(_id: id).first
end

#previous_versionsObject



48
49
50
51
52
53
# File 'lib/mongoid_versioning/versioned.rb', line 48

def previous_versions
  self.class.with(collection: self.class.versions_collection_name).
    where(_orig_id: id).
    lt(_version: _version).
    desc(:_version)
end

#revise(options = {}) ⇒ Object



30
31
32
33
34
35
36
# File 'lib/mongoid_versioning/versioned.rb', line 30

def revise options={}
  if new_record?
    !_create_revised(options).new_record?
  else
    _update_revised(options)
  end
end

#version(v) ⇒ Object



55
56
57
58
# File 'lib/mongoid_versioning/versioned.rb', line 55

def version v
  return latest_version if v == _version
  previous_versions.where(_version: v).first
end

#versionsObject




40
41
42
# File 'lib/mongoid_versioning/versioned.rb', line 40

def versions
  [latest_version].concat(previous_versions)
end