Module: Mongoid::Versioning
- Extended by:
- ActiveSupport::Concern
- Defined in:
- lib/mongoid/versioning.rb
Overview
Include this module to get automatic versioning of root level documents. This will add a version field to the Document
and a has_many association with all the versions contained in it.
Defined Under Namespace
Modules: ClassMethods
Instance Method Summary collapse
-
#revise ⇒ Object
Create a new version of the
Document
. -
#revise! ⇒ Object
Forces the creation of a new version of the
Document
, regardless of whether a change was actually made. -
#versioned_attributes ⇒ Hash
Filters the results of
attributes
by removing any fields that should not be versioned. -
#versioned_attributes_changed? ⇒ Boolean
Check if any versioned fields have been modified.
-
#versioned_changes ⇒ Hash
Filters the results of
changes
by removing any fields that should not be versioned. -
#versionless ⇒ Object
Executes a block that temporarily disables versioning.
Instance Method Details
#revise ⇒ Object
Create a new version of the Document
. This will load the previous document from the database and set it as the next version before saving the current document. It then increments the version number. If a #max_versions limit is set in the model and it’s exceeded, the oldest version gets discarded.
36 37 38 39 40 41 42 43 44 45 |
# File 'lib/mongoid/versioning.rb', line 36 def revise previous = previous_revision if previous && versioned_attributes_changed? versions.build(previous.versioned_attributes).attributes.delete("_id") if version_max.present? && versions.length > version_max versions.delete(versions.first) end self.version = (version || 1 ) + 1 end end |
#revise! ⇒ Object
Forces the creation of a new version of the Document
, regardless of whether a change was actually made.
54 55 56 57 58 59 |
# File 'lib/mongoid/versioning.rb', line 54 def revise! new_version = versions.build((previous_revision || self).versioned_attributes) versions.shift if version_max.present? && versions.length > version_max self.version = (version || 1 ) + 1 save end |
#versioned_attributes ⇒ Hash
Filters the results of attributes
by removing any fields that should not be versioned.
77 78 79 |
# File 'lib/mongoid/versioning.rb', line 77 def versioned_attributes only_versioned_attributes(attributes) end |
#versioned_attributes_changed? ⇒ Boolean
Check if any versioned fields have been modified. This is similar to changed?
, except this method also ignores fields set to be ignored by versioning.
88 89 90 |
# File 'lib/mongoid/versioning.rb', line 88 def versioned_attributes_changed? !versioned_changes.empty? end |
#versioned_changes ⇒ Hash
Filters the results of changes
by removing any fields that should not be versioned.
67 68 69 |
# File 'lib/mongoid/versioning.rb', line 67 def versioned_changes only_versioned_attributes(changes) end |
#versionless ⇒ Object
Executes a block that temporarily disables versioning. This is for cases where you do not want to version on every save.
101 102 103 104 105 106 |
# File 'lib/mongoid/versioning.rb', line 101 def versionless @versionless = true result = yield(self) if block_given? @versionless = false result || self end |