Module: Mongoid::RelationsDirtyTracking::Versioning

Extended by:
ActiveSupport::Concern
Defined in:
lib/mongoid/relations_dirty_tracking/versioning.rb

Instance Method Summary collapse

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(rel_meta, value)
  value
end

#revisable_with_relations?Boolean

Returns:

  • (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_relationsObject



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_relationsObject



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