lib/mongoid/selectable.rb in mongoid-5.0.0 vs lib/mongoid/selectable.rb in mongoid-5.0.1

- old
+ new

@@ -16,9 +16,44 @@ # # @return [ Hash ] The document's selector. # # @since 1.0.0 def atomic_selector - @atomic_selector ||= { "_id" => _root._id }.merge!(shard_key_selector) + @atomic_selector ||= + (embedded? ? embedded_atomic_selector : root_atomic_selector) + end + + private + + # Get the atomic selector for an embedded document. + # + # @api private + # + # @example Get the embedded atomic selector. + # document.embedded_atomic_selector + # + # @return [ Hash ] The embedded document selector. + # + # @since 4.0.0 + def embedded_atomic_selector + if persisted? && _id_changed? + _parent.atomic_selector + else + _parent.atomic_selector.merge("#{atomic_path}._id" => _id) + end + end + + # Get the atomic selector for a root document. + # + # @api private + # + # @example Get the root atomic selector. + # document.root_atomic_selector + # + # @return [ Hash ] The root document selector. + # + # @since 4.0.0 + def root_atomic_selector + { "_id" => _id }.merge!(shard_key_selector) end end end