Sha256: a78419edbc40f0087628b5cb97120fcd996ae864b351d38b4efe6cc186aa530f
Contents?: true
Size: 1.28 KB
Versions: 1
Compression:
Stored size: 1.28 KB
Contents
require 'mongoid' require 'active_support/concern' module Mongoid module ExtendedDirtyTrackable extend ActiveSupport::Concern included do attr_writer :embedded_changes, :associated_changes end def associated_changes @associated_changes = begin self.associations.keys.inject({}) do |memo, association| _changes = msg_relative(association) memo.merge!(_changes) memo end end end 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 def embedded_changes @embedded_changes = begin self.collect_children.inject({}) do |memo, child| memo.merge!(child.changes) if child.changed? memo end end end def changes from_super = super from_super.merge!(associated_changes) from_super.merge!(embedded_changes) end def changed? super || self._children.any?(&:changed?) end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
mongoid_extended_dirty_trackable-0.2.0 | lib/mongoid/extended_dirty_trackable.rb |