Module: Mongoid::RelationsDirtyTracking
- Extended by:
- ActiveSupport::Concern
- Defined in:
- lib/mongoid/relations_dirty_tracking.rb,
lib/mongoid/relations_dirty_tracking/version.rb,
lib/mongoid/relations_dirty_tracking/versioning.rb
Defined Under Namespace
Modules: ClassMethods, Versioning
Constant Summary
collapse
- VERSION =
"0.1.0"
Instance Method Summary
collapse
Instance Method Details
#changed_with_relations? ⇒ Boolean
51
52
53
|
# File 'lib/mongoid/relations_dirty_tracking.rb', line 51
def changed_with_relations?
changed_without_relations? or relations_changed?
end
|
#changes_with_relations ⇒ Object
56
57
58
|
# File 'lib/mongoid/relations_dirty_tracking.rb', line 56
def changes_with_relations
(changes_without_relations || {}).merge relation_changes
end
|
#relation_changes ⇒ Object
34
35
36
37
38
39
40
41
42
43
|
# File 'lib/mongoid/relations_dirty_tracking.rb', line 34
def relation_changes
changes = {}
@relations_shadow.each_pair do |rel_name, shadow_values|
current_values = tracked_relation_attributes(rel_name)
if current_values != shadow_values
changes[rel_name] = [shadow_values, current_values]
end
end
changes
end
|
#relations_changed? ⇒ Boolean
46
47
48
|
# File 'lib/mongoid/relations_dirty_tracking.rb', line 46
def relations_changed?
!relation_changes.empty?
end
|
#store_relations_shadow ⇒ Object
26
27
28
29
30
31
|
# File 'lib/mongoid/relations_dirty_tracking.rb', line 26
def store_relations_shadow
@relations_shadow = {}
self.class.tracked_relations.each do |rel_name|
@relations_shadow[rel_name] = tracked_relation_attributes(rel_name)
end
end
|
#tracked_relation_attributes(rel_name) ⇒ Object
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
# File 'lib/mongoid/relations_dirty_tracking.rb', line 61
def tracked_relation_attributes(rel_name)
rel_name = rel_name.to_s
values = nil
if meta = relations[rel_name]
values = if meta.relation == Mongoid::Relations::Embedded::One
send(rel_name) && send(rel_name).attributes.clone.delete_if {|key, _| key == 'updated_at' }
elsif meta.relation == Mongoid::Relations::Embedded::Many
send(rel_name) && send(rel_name).map {|child| child.attributes.clone.delete_if {|key, _| key == 'updated_at' } }
elsif meta.relation == Mongoid::Relations::Referenced::One
send(rel_name) && { "#{meta.key}" => send(rel_name)[meta.key] }
elsif meta.relation == Mongoid::Relations::Referenced::Many
send("#{rel_name.singularize}_ids").map {|id| { "#{meta.key}" => id } }
elsif meta.relation == Mongoid::Relations::Referenced::ManyToMany
send("#{rel_name.singularize}_ids").map {|id| { "#{meta.primary_key}" => id } }
elsif meta.relation == Mongoid::Relations::Referenced::In
send(meta.foreign_key) && { "#{meta.foreign_key}" => send(meta.foreign_key)}
end
end
values
end
|