module Mongoid::ExtendedDirtyTrackable

Constants

VERSION

Attributes

associated_changes[W]
embedded_changes[W]

Public Instance Methods

associated_changes() click to toggle source
# File lib/mongoid/extended_dirty_trackable.rb, line 12
def associated_changes
  @associated_changes = begin
    self.associations.keys.inject({}) do |memo, association|
      _changes = msg_relative(association)
      memo.merge!(_changes)
      memo
    end
  end
end
changed?() click to toggle source
Calls superclass method
# File lib/mongoid/extended_dirty_trackable.rb, line 51
def changed?
  super || self._children.any?(&:changed?)
end
changes() click to toggle source
Calls superclass method
# File lib/mongoid/extended_dirty_trackable.rb, line 45
def changes
  from_super = super
  from_super.merge!(associated_changes)
  from_super.merge!(embedded_changes)
end
embedded_changes() click to toggle source
# File lib/mongoid/extended_dirty_trackable.rb, line 36
def embedded_changes
  @embedded_changes = begin
    self.collect_children.inject({}) do |memo, child|
      memo.merge!(child.changes) if child.changed?
      memo
    end
  end
end
msg_relative(relationship) click to toggle source
# File lib/mongoid/extended_dirty_trackable.rb, line 22
def msg_relative(relationship)
  relative = self.send(relationship)

  if relative && !relative.is_a?(Array) && relative.changed?
    _changes = relative.changes
  elsif relative && relative.is_a?(Array) && relative.any?(&:changed)
    _changes = relative.inject({}) do |memo, obj|
      memo.merge!(obj.changes) if obj.changed?
    end
  end

  _changes || {}
end