123456789_123456789_123456789_123456789_123456789_

Class: Mongoid::Association::Referenced::BelongsTo::Proxy

Relationships & Source Files
Super Chains via Extension / Inclusion / Inheritance
Class Chain:
Instance Chain:
Inherits: Mongoid::Association::One
Defined in: lib/mongoid/association/referenced/belongs_to/proxy.rb

Overview

Transparent proxy for belong_to associations. An instance of this class is returned when calling the association getter method on the subject document. This class inherits from Mongoid::Association::Proxy and forwards most of its methods to the target of the association, i.e. the document on the opposite-side collection which must be loaded.

Constant Summary

::Mongoid::Association::Proxy - Inherited

KEEPER_METHODS

Class Attribute Summary

Class Method Summary

::Mongoid::Association::Proxy - Inherited

.apply_ordering

Apply ordering to the criteria if it was defined on the association.

.new

Sets the target and the association metadata properties.

Instance Attribute Summary

::Mongoid::Association::Proxy - Inherited

#_association,
#_base

Model instance for the base of the association.

#_target

Model instance for one to one associations, or array of model instances for one to many associations, for the target of the association.

::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

  • #nullify

    Removes the association between the base document and the target document by deleting the foreign key and the reference, orphaning the target document in the process.

  • #substitute(replacement) ⇒ self | nil

    Substitutes the supplied target documents for the existing document in the association.

  • #binding ⇒ Binding private

    Instantiate the binding associated with this association.

  • #normalize(replacement) ⇒ Document private Internal use only Internal use only

    Normalize the value provided as a replacement for substitution.

::Mongoid::Evolvable - Included

#__evolve_object_id__

Evolve the document into an object id.

::Mongoid::Association::One - Inherited

#__evolve_object_id__

Evolve the proxy document into an object id.

#clear

Clear this relation - same as calling #delete on the document.

#in_memory

Get all the documents in the relation that are loaded into memory.

#respond_to?

Since method_missing is overridden we should override this as well.

::Mongoid::Association::Proxy - Inherited

#extend_proxies

Allow extension to be an array and extend each module.

#extend_proxy,
#klass

Get the class from the association, or return nil if no association present.

#reset_unloaded

Resets the criteria inside the association proxy.

#substitutable

The default substitutable object for an association proxy is the clone of the target.

::Mongoid::Association::Marshalable - Included

#marshal_dump

Provides the data needed to Marshal.dump an association proxy.

#marshal_load

Takes the provided data and sets it back on the proxy.

Constructor Details

.new(base, target, association) ⇒ Proxy

Instantiate a new belongs_to association proxy.

Examples:

Create the new proxy.

Association::BelongsTo::Proxy.new(game, person, association)

Parameters:

[ GitHub ]

  
# File 'lib/mongoid/association/referenced/belongs_to/proxy.rb', line 26

def initialize(base, target, association)
  super do
    characterize_one(_target)
    bind_one
  end
end

Class Attribute Details

.embedded?false (readonly)

Returns true if the association is an embedded one. In this case always false.

Examples:

Is this association embedded?

Association::BelongsTo::Proxy.embedded?

Returns:

  • (false)

    Always false.

[ GitHub ]

  
# File 'lib/mongoid/association/referenced/belongs_to/proxy.rb', line 121

def embedded?
  false
end

Class Method Details

.eager_loader(association, docs) ⇒ Mongoid::Association::Referenced::BelongsTo::Eager

Get the Eager object for this type of association.

Examples:

Get the eager loader object

Parameters:

Returns:

[ GitHub ]

  
# File 'lib/mongoid/association/referenced/belongs_to/proxy.rb', line 110

def eager_loader(association, docs)
  Eager.new(association, docs)
end

Instance Attribute Details

#persistable?true | false (readonly, private)

Are we able to persist this association?

Examples:

Can we persist the association?

relation.persistable?

Returns:

  • (true | false)

    If the association is persistable.

[ GitHub ]

  
# File 'lib/mongoid/association/referenced/belongs_to/proxy.rb', line 96

def persistable?
  _target.persisted? && !_binding? && !_building?
end

Instance Method Details

#bindingBinding (private)

Instantiate the binding associated with this association.

Examples:

Get the binding object.

binding([ address ])

Returns:

  • (Binding)

    The binding object.

[ GitHub ]

  
# File 'lib/mongoid/association/referenced/belongs_to/proxy.rb', line 70

def binding
  BelongsTo::Binding.new(_base, _target, _association)
end

#normalize(replacement) ⇒ Document (private)

This method is for internal use only.

Normalize the value provided as a replacement for substitution.

Examples:

Normalize the substitute.

proxy.normalize(id)

Parameters:

  • replacement (Document | Object)

    The replacement object.

Returns:

[ GitHub ]

  
# File 'lib/mongoid/association/referenced/belongs_to/proxy.rb', line 84

def normalize(replacement)
  return replacement if replacement.is_a?(Document)

  _association.build(klass, replacement)
end

#nullify

Removes the association between the base document and the target document by deleting the foreign key and the reference, orphaning the target document in the process.

Examples:

Nullify the association.

person.game.nullify
[ GitHub ]

  
# File 'lib/mongoid/association/referenced/belongs_to/proxy.rb', line 39

def nullify
  unbind_one
  _target.save
end

#substitute(replacement) ⇒ self | nil

Substitutes the supplied target documents for the existing document in the association.

Examples:

Substitute the association.

name.substitute(new_name)

Parameters:

Returns:

  • (self | nil)

    The association or nil.

[ GitHub ]

  
# File 'lib/mongoid/association/referenced/belongs_to/proxy.rb', line 53

def substitute(replacement)
  unbind_one
  return unless replacement

  self._target = normalize(replacement)
  bind_one
  self
end