Module: SnailTrail::VersionConcern
- Extended by:
- ActiveSupport::Concern
- Included in:
- Version
- Defined in:
- lib/snail_trail/version_concern.rb
Overview
Originally, SnailTrail did not provide this module, and all of this functionality was in ‘SnailTrail::Version`. That model still exists (and is used by most apps) but by moving the functionality to this module, people can include this concern instead of sub-classing the `Version` model.
Defined Under Namespace
Modules: ClassMethods
Constant Summary collapse
- E_YAML_PERMITTED_CLASSES =
" SnailTrail encountered a Psych::DisallowedClass error during\n deserialization of YAML column, indicating that\n yaml_column_permitted_classes has not been configured correctly. %s\n".squish.freeze
Instance Method Summary collapse
-
#changeset ⇒ Object
Returns what changed in this version of the item.
-
#index ⇒ Object
Returns an integer representing the chronological position of the version among its siblings.
- #next ⇒ Object
- #object_deserialized ⇒ Object private
- #previous ⇒ Object
-
#reify(options = {}) ⇒ Object
Restore the item from this version.
-
#snail_trail_originator ⇒ Object
Returns who put the item into the state stored in this version.
-
#terminator ⇒ Object
(also: #version_author)
Returns who changed the item from the state it had in this version.
Instance Method Details
#changeset ⇒ Object
Returns what changed in this version of the item. ‘ActiveModel::Dirty#changes`. returns `nil` if your `versions` table does not have an `object_changes` text column.
279 280 281 282 |
# File 'lib/snail_trail/version_concern.rb', line 279 def changeset return nil unless self.class.column_names.include? "object_changes" @changeset ||= load_changeset end |
#index ⇒ Object
Returns an integer representing the chronological position of the version among its siblings. The “create” event, for example, has an index of 0.
309 310 311 |
# File 'lib/snail_trail/version_concern.rb', line 309 def index @index ||= RecordHistory.new(sibling_versions, self.class).index(self) end |
#next ⇒ Object
296 297 298 |
# File 'lib/snail_trail/version_concern.rb', line 296 def next @next ||= sibling_versions.subsequent(self).first end |
#object_deserialized ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
243 244 245 246 247 248 249 |
# File 'lib/snail_trail/version_concern.rb', line 243 def object_deserialized if self.class.object_col_is_json? object else SnailTrail.serializer.load(object) end end |
#previous ⇒ Object
300 301 302 |
# File 'lib/snail_trail/version_concern.rb', line 300 def previous @previous ||= sibling_versions.preceding(self).first end |
#reify(options = {}) ⇒ Object
Restore the item from this version.
Options:
-
:mark_for_destruction
-
‘true` - Mark the has_one/has_many associations that did not exist in the reified version for destruction, instead of removing them.
-
‘false` - Default. Useful for persisting the reified version.
-
-
:dup
-
‘false` - Default.
-
‘true` - Always create a new object instance. Useful for comparing two versions of the same object.
-
-
:unversioned_attributes
-
‘:nil` - Default. Attributes undefined in version record are set to nil in reified record.
-
‘:preserve` - Attributes undefined in version record are not modified.
-
268 269 270 271 272 273 274 |
# File 'lib/snail_trail/version_concern.rb', line 268 def reify( = {}) unless self.class.column_names.include? "object" raise Error, "reify requires an object column" end return nil if object.nil? ::SnailTrail::Reifier.reify(self, ) end |
#snail_trail_originator ⇒ Object
Returns who put the item into the state stored in this version.
285 286 287 |
# File 'lib/snail_trail/version_concern.rb', line 285 def snail_trail_originator @snail_trail_originator ||= previous.try(:whodunnit) end |
#terminator ⇒ Object Also known as:
Returns who changed the item from the state it had in this version. This is an alias for ‘whodunnit`.
291 292 293 |
# File 'lib/snail_trail/version_concern.rb', line 291 def terminator @terminator ||= whodunnit end |