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