def substitute(replacement)
tap do |proxy|
if replacement.blank?
if _assigning? && !proxy.empty?
base.atomic_unsets.push(proxy.first.atomic_path)
end
proxy.clear
else
atomically(:$set) do
if replacement.first.is_a?(Hash)
replacement = Many.builder(base, metadata, replacement).build
end
proxy.target = replacement.compact
if _assigning?
base.delayed_atomic_sets[metadata.name.to_s] = proxy.as_document
end
proxy.target.each_with_index do |doc, index|
integrate(doc)
doc._index = index
doc.save if base.persisted? && !_assigning?
end
end
end
end
end