Module: Mongoid::Delorean::Trackable::CommonInstanceMethods

Defined in:
lib/mongoid/delorean/trackable.rb

Instance Method Summary collapse

Instance Method Details

#attributes_with_relationsObject



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.embedded_relations.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_relationsObject



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.embedded_relations.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