class Mongoid::Association::Proxy

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

Attributes

_association[RW]
_base[RW]

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.

_target[RW]

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.

Protected Class Methods

apply_ordering(criteria, association) click to toggle source

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

@example Apply the ordering.

Proxy.apply_ordering(criteria, association)

@param [ Criteria ] criteria The criteria to modify. @param [ Association ] association The association metadata.

@return [ Criteria ] The ordered criteria.

@since 3.0.6

# File lib/mongoid/association/proxy.rb, line 204
def apply_ordering(criteria, association)
  association.order ? criteria.order_by(association.order) : criteria
end

Public Instance Methods

extend_proxies(*extension) click to toggle source

Allow extension to be an array and extend each module

# File lib/mongoid/association/proxy.rb, line 63
def extend_proxies(*extension)
  extension.flatten.each {|ext| extend_proxy(ext) }
end
init(base, target, association) { |self| ... } click to toggle source

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

@example Initialize the proxy.

proxy.init(person, name, association)

@param [ Document ] base The base document on the proxy. @param [ Document, Array<Document> ] target The target of the proxy. @param [ Association ] association The association metadata.

@since 2.0.0.rc.1

# File lib/mongoid/association/proxy.rb, line 56
def init(base, target, association)
  @_base, @_target, @_association = base, target, association
  yield(self) if block_given?
  extend_proxies(association.extension) if association.extension
end
klass() click to toggle source

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

@example Get the class.

proxy.klass

@return [ Class ] The association class.

@since 3.0.15

# File lib/mongoid/association/proxy.rb, line 75
def klass
  _association ? _association.klass : nil
end
reset_unloaded() click to toggle source

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

@example Reset the association criteria.

person.preferences.reset_relation_criteria

@since 3.0.14

# File lib/mongoid/association/proxy.rb, line 86
def reset_unloaded
  _target.reset_unloaded(criteria)
end
substitutable() click to toggle source

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

@example Get the substitutable.

proxy.substitutable

@return [ Object ] A clone of the target.

@since 2.1.6

# File lib/mongoid/association/proxy.rb, line 99
def substitutable
  _target
end

Protected Instance Methods

characterize_one(document) click to toggle source

Takes the supplied document and sets the association on it.

@example Set the association metadata.

proxt.characterize_one(name)

@param [ Document ] document The document to set on.

@since 2.0.0.rc.4

# File lib/mongoid/association/proxy.rb, line 126
def characterize_one(document)
  document._association = _association unless document._association
end
collection() click to toggle source

Get the collection from the root of the hierarchy.

@example Get the collection.

relation.collection

@return [ Collection ] The root’s collection.

@since 2.0.0

# File lib/mongoid/association/proxy.rb, line 113
def collection
  root = _base._root
  root.collection unless root.embedded?
end
execute_callback(callback, doc) click to toggle source

Executes a callback method

@example execute the before add callback

execute_callback(:before_add)

@param [ Symbol ] callback to be executed

@since 3.1.0

# File lib/mongoid/association/proxy.rb, line 181
def execute_callback(callback, doc)
  _association.get_callbacks(callback).each do |c|
    if c.is_a? Proc
      c.call(_base, doc)
    else
      _base.send c, doc
    end
  end
end
method_missing(name, *args, &block) click to toggle source
# File lib/mongoid/association/proxy.rb, line 136
               def method_missing(name, *args, &block)
  _target.send(name, *args, &block)
end
raise_mixed() click to toggle source

When the base document illegally references an embedded document this error will get raised.

@example Raise the error.

relation.raise_mixed

@raise [ Errors::MixedRelations ] The error.

@since 2.0.0

# File lib/mongoid/association/proxy.rb, line 154
def raise_mixed
  raise Errors::MixedRelations.new(_base.class, _association.klass)
end
raise_unsaved(doc) click to toggle source

When the base is not yet saved and the user calls create or create! on the association, this error will get raised.

@example Raise the error.

relation.raise_unsaved(post)

@param [ Document ] doc The child document getting created.

@raise [ Errors::UnsavedDocument ] The error.

@since 2.0.0.rc.6

# File lib/mongoid/association/proxy.rb, line 169
def raise_unsaved(doc)
  raise Errors::UnsavedDocument.new(_base, doc)
end
respond_to_missing?(name, *args) click to toggle source
# File lib/mongoid/association/proxy.rb, line 141
               def respond_to_missing?(name, *args)
  _target.respond_to?(name, *args)
end