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 46 47 |
# File 'lib/mongoid/versioning.rb', line 36 def revise previous = previous_revision if previous && versioned_attributes_changed? versions.build( previous.versioned_attributes, :without_protection => true ).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.
56 57 58 59 60 61 62 63 |
# File 'lib/mongoid/versioning.rb', line 56 def revise! new_version = versions.build( (previous_revision || self).versioned_attributes, :without_protection => true ) 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.
81 82 83 |
# File 'lib/mongoid/versioning.rb', line 81 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.
92 93 94 |
# File 'lib/mongoid/versioning.rb', line 92 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.
71 72 73 |
# File 'lib/mongoid/versioning.rb', line 71 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.
105 106 107 108 109 110 |
# File 'lib/mongoid/versioning.rb', line 105 def versionless @versionless = true result = yield(self) if block_given? @versionless = false result || self end |