Module: Mongoid::Delorean::Trackable::CommonInstanceMethods
- Defined in:
- lib/mongoid/delorean/trackable.rb
Instance Method Summary collapse
Instance Method Details
#attributes_with_relations ⇒ Object
117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 |
# File 'lib/mongoid/delorean/trackable.rb', line 117 def attributes_with_relations _attributes = self.attributes.dup relation_attrs = {} self..each do |name, details| relation = self.send(name) if details.relation == Mongoid::Relations::Embedded::One relation_attrs[name] = relation.attributes_with_relations if relation else relation_attrs[name] = [] r_attrs = relation.map {|o| o.attributes_with_relations} relation_attrs[name] << r_attrs unless r_attrs.empty? r_changes = relation.map {|o| o.changes} relation_attrs[name].flatten! end end _attributes.merge!(relation_attrs) return _attributes end |
#changes_with_relations ⇒ Object
91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 |
# File 'lib/mongoid/delorean/trackable.rb', line 91 def changes_with_relations _changes = self.changes.dup %w{version updated_at created_at}.each do |col| _changes.delete(col) _changes.delete(col.to_sym) end relation_changes = {} self..each do |name, details| relation = self.send(name) relation_changes[name] = [] if details.relation == Mongoid::Relations::Embedded::One relation_changes[name] = relation.changes_with_relations if relation else r_changes = relation.map {|o| o.changes_with_relations} relation_changes[name] << r_changes unless r_changes.empty? relation_changes[name].flatten! end relation_changes.delete(name) if relation_changes[name].empty? end _changes.merge!(relation_changes) return _changes end |