Class: Mongoid::Association::Proxy

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Includes:
Marshalable, Threaded::Lifecycle
Defined in:
build/mongoid-8.1/lib/mongoid/association/proxy.rb

Overview

This class is the superclass for all association proxy objects, and contains common behavior for all of them.

Direct Known Subclasses

Many, One

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Marshalable

#marshal_dump, #marshal_load

Instance Attribute Details

#_associationObject

Returns the value of attribute _association.



30
31
32
# File 'build/mongoid-8.1/lib/mongoid/association/proxy.rb', line 30

def _association
  @_association
end

#_baseObject

Model instance for the base of the association.

For example, if a Post embeds_many Comments, _base is a particular instance of the Post model.



28
29
30
# File 'build/mongoid-8.1/lib/mongoid/association/proxy.rb', line 28

def _base
  @_base
end

#_targetObject

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

For example, if a Post embeds_many Comments, _target is an array of Comment models embedded in a particular Post.



37
38
39
# File 'build/mongoid-8.1/lib/mongoid/association/proxy.rb', line 37

def _target
  @_target
end

Class Method Details

.apply_ordering(criteria, association) ⇒ Criteria

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

Examples:

Apply the ordering.

Proxy.apply_ordering(criteria, association)

Parameters:

  • criteria (Criteria)

    The criteria to modify.

  • association (Association)

    The association metadata.

Returns:



194
195
196
# File 'build/mongoid-8.1/lib/mongoid/association/proxy.rb', line 194

def apply_ordering(criteria, association)
  association.order ? criteria.order_by(association.order) : criteria
end

Instance Method Details

#extend_proxies(*extension) ⇒ Object

Allow extension to be an array and extend each module



60
61
62
# File 'build/mongoid-8.1/lib/mongoid/association/proxy.rb', line 60

def extend_proxies(*extension)
  extension.flatten.each {|ext| extend_proxy(ext) }
end

#init(base, target, association) {|_self| ... } ⇒ Object

Convenience for setting the target and the association metadata properties since all proxies will need to do this.

Examples:

Initialize the proxy.

proxy.init(person, name, association)

Parameters:

Yields:

  • (_self)

Yield Parameters:



53
54
55
56
57
# File 'build/mongoid-8.1/lib/mongoid/association/proxy.rb', line 53

def init(base, target, association)
  @_base, @_target, @_association = base, target, association
  yield(self) if block_given?
  extend_proxies(association.extension) if association.extension
end

#klassClass

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

Examples:

Get the class.

proxy.klass

Returns:

  • (Class)

    The association class.



70
71
72
# File 'build/mongoid-8.1/lib/mongoid/association/proxy.rb', line 70

def klass
  _association ? _association.klass : nil
end

#reset_unloadedObject

Resets the criteria inside the association proxy. Used by many to many associations to keep the underlying ids array in sync.

Examples:

Reset the association criteria.

person.preferences.reset_relation_criteria


79
80
81
# File 'build/mongoid-8.1/lib/mongoid/association/proxy.rb', line 79

def reset_unloaded
  _target.reset_unloaded(criteria)
end

#substitutableObject

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

Examples:

Get the substitutable.

proxy.substitutable

Returns:

  • (Object)

    A clone of the target.



90
91
92
# File 'build/mongoid-8.1/lib/mongoid/association/proxy.rb', line 90

def substitutable
  _target
end