123456789_123456789_123456789_123456789_123456789_

Class: Mongoid::Atomic::Paths::Embedded::Many

Relationships & Source Files
Super Chains via Extension / Inclusion / Inheritance
Instance Chain:
Inherits: Object
Defined in: lib/mongoid/atomic/paths/embedded/many.rb

Overview

This class encapsulates behavior for locating and updating documents that are defined as an embedded 1-n.

Class Method Summary

Instance Attribute Summary

Instance Method Summary

::Mongoid::Atomic::Paths::Embedded - Included

#path

Get the path to the document in the hierarchy.

Constructor Details

.new(document) ⇒ Many

Create the new path utility.

Examples:

Create the path util.

Many.new(document)

Parameters:

  • document (Document)

    The document to generate the paths for.

[ GitHub ]

  
# File 'lib/mongoid/atomic/paths/embedded/many.rb', line 20

def initialize(document)
  @document, @parent = document, document._parent
  @insert_modifier, @delete_modifier ="$push", "$pull"
end

Class Method Details

.position_without_document(parent, association) ⇒ String

Get the position of where the document would go for the given association. The use case for this function is when trying to persist an empty list for an embedded association. All of the existing functions for getting the position to store a document require passing in a document to store, which we don’t have when trying to store the empty list.

Parameters:

Returns:

  • (String)

    The position string.

[ GitHub ]

  
# File 'lib/mongoid/atomic/paths/embedded/many.rb', line 52

def position_without_document(parent, association)
  pos = parent.atomic_position
  "#{pos}#{"." unless pos.blank?}#{association.store_as}"
end

Instance Method Details

#positionString

Get the position of the document in the hierarchy. This will include indexes of 1-n embedded associations that may sit above the embedded many.

Examples:

Get the position.

many.position

Returns:

  • (String)

    The position of the document.

[ GitHub ]

  
# File 'lib/mongoid/atomic/paths/embedded/many.rb', line 33

def position
  pos = parent.atomic_position
  locator = document.new_record? ? "" : ".#{document._index}"
  "#{pos}#{"." unless pos.blank?}#{document._association.store_as}#{locator}"
end