123456789_123456789_123456789_123456789_123456789_

Module: Mongoid::Association::Embedded::EmbedsOne::Buildable

Relationships & Source Files
Extension / Inclusion / Inheritance Descendants
Included In:
Super Chains via Extension / Inclusion / Inheritance
Instance Chain:
Defined in: lib/mongoid/association/embedded/embeds_one/buildable.rb

Overview

Builder class for embeds_one associations.

Instance Attribute Summary

::Mongoid::Threaded::Lifecycle - Included

#_assigning

Begin the assignment of attributes.

#_assigning?

Is the current thread in assigning mode?

#_binding

Execute a block in binding mode.

#_binding?

Is the current thread in binding mode?

#_building

Execute a block in building mode.

#_building?

Is the current thread in building mode?

#_creating?

Is the current thread in creating mode?

#_loading

Execute a block in loading mode.

#_loading?

Is the current thread in loading mode?

Instance Method Summary

Instance Method Details

#build(base, object, _type = nil, selected_fields = nil) ⇒ Document

Builds the document out of the attributes using the provided association metadata on the association. Instantiates through the factory in order to make sure subclasses and allocation are used if fitting.

Examples:

Build the document.

Builder.new(meta, attrs).build

Parameters:

  • base (Document)

    The document this association hangs off of.

  • object (Document | Hash)

    The related document.

  • _type (String) (defaults to: nil)

    Not used in this context.

  • selected_fields (Hash) (defaults to: nil)

    ::Mongoid::Fields which were retrieved via #only. If selected_fields are specified, fields not listed in it will not be accessible in the built document.

Returns:

[ GitHub ]

  
# File 'lib/mongoid/association/embedded/embeds_one/buildable.rb', line 28

def build(base, object, _type = nil, selected_fields = nil)
  if object.is_a?(Hash)
    if _loading? && base.persisted?
      Factory.execute_from_db(klass, object, nil, selected_fields, execute_callbacks: false)
    else
      Factory.build(klass, object)
    end
  else
    clear_associated(object)
    object
  end
end

#clear_associated(doc) (private)

[ GitHub ]

  
# File 'lib/mongoid/association/embedded/embeds_one/buildable.rb', line 43

def clear_associated(doc)
  if doc && (inv = inverse(doc))
    if associated = doc.ivar(inv)
      associated.substitute(nil)
    end
  end
end