Module: Mongoid::RelationsDirtyTracking::Versioning
- Extended by:
- ActiveSupport::Concern
- Defined in:
- lib/mongoid/relations_dirty_tracking/versioning.rb
Instance Method Summary collapse
- #preserve_versioned_relation(rel_meta, value) ⇒ Object
- #revisable_with_relations? ⇒ Boolean
- #revise_with_relations ⇒ Object
- #versioned_changes_with_relations ⇒ Object
Instance Method Details
#preserve_versioned_relation(rel_meta, value) ⇒ Object
49 50 51 |
# File 'lib/mongoid/relations_dirty_tracking/versioning.rb', line 49 def preserve_versioned_relation(, value) value end |
#revisable_with_relations? ⇒ Boolean
41 42 43 |
# File 'lib/mongoid/relations_dirty_tracking/versioning.rb', line 41 def revisable_with_relations? (versioned_attributes_changed? || relations_changed?) && !versionless? end |
#revise_with_relations ⇒ Object
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/mongoid/relations_dirty_tracking/versioning.rb', line 13 def revise_with_relations previous = previous_revision if previous && (versioned_attributes_changed? || relations_changed?) new_version = versions.build(previous.versioned_attributes, without_protection: true) rel_changes = relation_changes self.class.tracked_relations.each do |rel_name| # from some reason previous contaion also newly added relations prev_value = rel_changes.include?(rel_name) ? rel_changes[rel_name][0] : previous[rel_name.to_sym] new_version.send "#{rel_name}=", preserve_versioned_relation(reflect_on_association(rel_name), prev_value) end if version_max.present? && versions.length > version_max deleted = versions.first if deleted.paranoid? versions.delete_one(deleted) collection.find(atomic_selector). update({ "$pull" => { "versions" => { "version" => deleted.version }}}) else versions.delete(deleted) end end self.version = (version || 1) + 1 end end |
#versioned_changes_with_relations ⇒ Object
45 46 47 |
# File 'lib/mongoid/relations_dirty_tracking/versioning.rb', line 45 def versioned_changes_with_relations only_versioned_attributes(changes_without_relations.except("updated_at")) end |