Class: Promiscuous::Subscriber::Model::Mongoid::EmbeddedDocs
- Inherits:
-
Object
- Object
- Promiscuous::Subscriber::Model::Mongoid::EmbeddedDocs
show all
- Includes:
- Base
- Defined in:
- lib/promiscuous/subscriber/model/mongoid.rb
Class Method Summary
collapse
Instance Method Summary
collapse
Methods included from Base
#__promiscuous_eventual_consistency_update
Class Method Details
.__promiscuous_fetch_new(id) ⇒ Object
101
102
103
|
# File 'lib/promiscuous/subscriber/model/mongoid.rb', line 101
def self.__promiscuous_fetch_new(id)
new
end
|
Instance Method Details
#__promiscuous_update(payload, options = {}) ⇒ Object
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
# File 'lib/promiscuous/subscriber/model/mongoid.rb', line 67
def __promiscuous_update(payload, options={})
old_embeddeds = options[:old_value]
new_embeddeds = payload.attributes
new_embeddeds.each do |new_e|
old_e = old_embeddeds.select { |e| e.id.to_s == new_e['id'] }.first
if old_e
new_e['existed'] = true
old_e.instance_variable_set(:@keep, true)
payload = Promiscuous::Subscriber::Operation.new(new_e)
old_e.__promiscuous_update(payload, :old_value => old_e)
end
end
old_embeddeds.each do |old_e|
old_e.destroy unless old_e.instance_variable_get(:@keep)
end
new_embeddeds.reject { |new_e| new_e['existed'] }.each do |new_e|
payload = Promiscuous::Subscriber::Operation.new(new_e)
new_e_instance = payload.model.__promiscuous_fetch_new(payload.id)
new_e_instance.__promiscuous_update(payload)
options[:parent].__send__(old_embeddeds.metadata[:name]) << new_e_instance
end
false
end
|