as()
click to toggle source
Returns the as option of the relation.
@example Get the as option.
metadata.as
@return [ true, false ] The as option.
@since 2.1.0
as?()
click to toggle source
Tells whether an as option exists.
@example Is the as option set?
metadata.as?
@return [ true, false ] True if an as exists, false if not.
@since 2.0.0.rc.1
autobuilding?()
click to toggle source
Is the relation autobuilding if accessed via the getter and the document is
new.
@example Is the relation autobuilding?
metadata.autobuilding?
@return [ true, false ] If the relation autobuilds.
@since 3.0.0
def autobuilding?
!!self[:autobuild]
end
autosave()
click to toggle source
Returns the autosave option of the relation.
@example Get the autosave option.
metadata.autosave
@return [ true, false ] The autosave option.
@since 2.1.0
def autosave
self[:autosave]
end
autosave?()
click to toggle source
Does the metadata have a autosave option?
@example Is the relation autosaving?
metadata.autosave?
@return [ true, false ] If the relation autosaves.
@since 2.1.0
def autosave?
!!autosave
end
builder(base, object)
click to toggle source
Gets a relation builder associated with the relation this metadata is for.
@example Get the builder.
metadata.builder(document)
@param [ Document ] base The base document.
@param [ Object ] object A document or
attributes to give the builder.
@return [ Builder ] The builder for the
relation.
@since 2.0.0.rc.1
def builder(base, object)
relation.builder(base, self, object)
end
cascade_strategy()
click to toggle source
Returns the name of the strategy used for handling dependent relations.
@example Get the strategy.
metadata.cascade_strategy
@return [ Object ] The cascading strategy
to use.
@since 2.0.0.rc.1
def cascade_strategy
if dependent?
"Mongoid::Relations::Cascading::#{dependent.to_s.classify}".constantize
end
end
cascading_callbacks?()
click to toggle source
Is this an embedded relations that allows callbacks to cascade down to it?
@example Does the relation have cascading callbacks?
metadata.cascading_callbacks?
@return [ true, false ] If the relation cascades callbacks.
@since 2.3.0
def cascading_callbacks?
!!self[:cascade_callbacks]
end
class_name()
click to toggle source
Returns the name of the class that this relation contains. If the class_name was provided as an
option this will return that, otherwise it will determine the name from the
name property.
@example Get the class name.
metadata.class_name
@return [ String ] The name of the relation's proxied class.
@since 2.0.0.rc.1
def class_name
@class_name ||= (self[:class_name] || classify).sub(/\A::/,"")
end
constraint()
click to toggle source
Get the foreign key contraint for the metadata.
@example Get the constaint.
metadata.constraint
@return [ Constraint ] The constraint.
@since 2.0.0.rc.1
def constraint
@constraint ||= Constraint.new(self)
end
counter_cache_column_name()
click to toggle source
Returns the counter cache column name
@example Get the counter cache column.
metadata.counter_cache_column_name
@return [ String ] The counter cache column
@since 3.1.0
def counter_cache_column_name
if self[:counter_cache] == true
"#{inverse || inverse_class_name.demodulize.underscore.pluralize}_count"
else
self[:counter_cache].to_s
end
end
counter_cached?()
click to toggle source
Does the metadata have a counter cache?
@example Is the metadata counter_cached?
metadata.counter_cached?
@return [ true, false ] If the metadata has counter_cache
@since 3.1.0
def counter_cached?
!!self[:counter_cache]
end
criteria(object, type)
click to toggle source
Get the criteria that is used to query for this metadata's relation.
@example Get the criteria.
metadata.criteria([ id_one, id_two ], Person)
@param [ Object ] object The foreign key
used for the query. @param [ Class ] type The base class.
@return [ Criteria ] The criteria.
@since 2.1.0
def criteria(object, type)
relation.criteria(self, object, type)
end
cyclic()
click to toggle source
Returns the cyclic option of the relation.
@example Get the cyclic option.
metadata.cyclic
@return [ true, false ] The cyclic option.
@since 2.1.0
def cyclic
self[:cyclic]
end
cyclic?()
click to toggle source
Does the metadata have a cyclic option?
@example Is the metadata cyclic?
metadata.cyclic?
@return [ true, false ] If the metadata is cyclic.
@since 2.1.0
dependent()
click to toggle source
Returns the dependent option of the relation.
@example Get the dependent option.
metadata.dependent
@return [ Symbol ] The dependent option.
@since 2.1.0
def dependent
self[:dependent]
end
dependent?()
click to toggle source
Does the metadata have a dependent option?
@example Is the metadata performing cascades?
metadata.dependent?
@return [ true, false ] If the metadata cascades.
@since 2.1.0
def dependent?
!!dependent
end
destructive?()
click to toggle source
Does the relation have a destructive dependent option specified. This is
true for :dependent => :delete and :dependent => :destroy.
@example Is the relation destructive?
metadata.destructive?
@return [ true, false ] If the relation is destructive.
@since 2.1.0
def destructive?
@destructive ||= (dependent == :delete || dependent == :destroy)
end
eager_load(ids)
click to toggle source
Get the criteria needed to eager load this relation.
@example Get the eager loading criteria.
metadata.eager_load(criteria)
@param [ Array<Object> ] ids The ids of the returned parents.
@return [ Criteria ] The eager loading
criteria.
@since 2.2.0
def eager_load(ids)
relation.eager_load(self, ids)
end
embedded?()
click to toggle source
Will determine if the relation is an embedded one or not. Currently only
checks against embeds one and many.
@example Is the document embedded.
metadata.embedded?
@return [ true, false ] True if embedded, false if not.
@since 2.0.0.rc.1
def embedded?
@embedded ||= (macro == :embeds_one || macro == :embeds_many)
end
extension()
click to toggle source
Returns the extension of the relation.
@example Get the relation extension.
metadata.extension
@return [ Module ] The extension or nil.
@since 2.0.0.rc.1
def extension
self[:extend]
end
extension?()
click to toggle source
Tells whether an extension definition exist for this relation.
@example Is an extension defined?
metadata.extension?
@return [ true, false ] True if an extension exists, false if not.
@since 2.0.0.rc.1
def extension?
!!extension
end
forced_nil_inverse?()
click to toggle source
Does this metadata have a forced nil inverse_of defined. (Used in
many to manies)
@example Is this a forced nil inverse?
metadata.forced_nil_inverse?
@return [ true, false ] If inverse_of has been explicitly
set to nil.
@since 2.3.3
def forced_nil_inverse?
@forced_nil_inverse ||= has_key?(:inverse_of) && inverse_of.nil?
end
foreign_key()
click to toggle source
Handles all the logic for figuring out what the foreign_key is for each
relations query. The logic is as follows:
-
If the developer defined a custom key, use that.
-
If the relation stores a foreign key, use the class_name_id strategy.
-
If the relation does not store the key, use the inverse_class_name_id
strategy.
@example Get the foreign key.
metadata.foreign_key
@return [ String ] The foreign key for the relation.
@since 2.0.0.rc.1
def foreign_key
@foreign_key ||= determine_foreign_key
end
foreign_key_check()
click to toggle source
Get the name of the method to check if the foreign key has changed.
@example Get the foreign key check method.
metadata.foreign_key_check
@return [ String ] The foreign key check.
@since 2.1.0
def foreign_key_check
@foreign_key_check ||= "#{foreign_key}_changed?"
end
foreign_key_setter()
click to toggle source
Returns the name of the method used to set the foreign key on a document.
@example Get the setter for the foreign key.
metadata.foreign_key_setter
@return [ String ] The foreign_key plus =.
@since 2.0.0.rc.1
def foreign_key_setter
@foreign_key_setter ||= "#{foreign_key}="
end
index()
click to toggle source
Returns the index option of the relation.
@example Get the index option.
metadata.index
@return [ true, false ] The index option.
@since 2.1.0
def index
self[:index]
end
indexed?()
click to toggle source
Tells whether a foreign key index exists on the relation.
@example Is the key indexed?
metadata.indexed?
@return [ true, false ] True if an index exists, false if not.
@since 2.0.0.rc.1
inspect()
click to toggle source
Since a lot of the information from the metadata is inferred and not
explicitly stored in the hash, the inspection needs to be much more
detailed.
@example Inspect the metadata.
metadata.inspect
@return [ String ] Oodles of information in a nice format.
@since 2.0.0.rc.1
def inspect
%{#<Mongoid::Relations::Metadata
autobuild: #{autobuilding?}
class_name: #{class_name}
cyclic: #{cyclic.inspect}
counter_cache:#{counter_cached?}
dependent: #{dependent.inspect}
inverse_of: #{inverse_of.inspect}
key: #{key}
macro: #{macro}
name: #{name}
order: #{order.inspect}
polymorphic: #{polymorphic?}
relation: #{relation}
setter: #{setter}
versioned: #{versioned?}>
}
end
inverse(other = nil)
click to toggle source
Get the name of the inverse relation if it exists. If this is a polymorphic
relation then just return the :as option that was defined.
@example Get the name of the inverse.
metadata.inverse
@param [ Document ] other The document to
aid in the discovery.
@return [ Symbol ] The inverse name.
@since 2.0.0.rc.1
def inverse(other = nil)
invs = inverses(other)
invs.first if invs.count == 1
end
inverse_class_name()
click to toggle source
inverse_class_name?()
click to toggle source
Returns the if the inverse class name option exists.
@example Is an inverse class name defined?
metadata.inverse_class_name?
@return [ true, false ] If the inverse if defined.
@since 2.1.0
def inverse_class_name?
!!inverse_class_name
end
inverse_field_bindable?()
click to toggle source
Is the inverse field bindable? Ie, do we have more than one definition on
the parent class with the same polymorphic name (as).
@example Is the inverse of bindable?
metadata.inverse_of_bindable?
@return [ true, false ] If the relation needs the inverse of field set.
@since 3.0.6
def inverse_field_bindable?
@inverse_field_bindable ||= (inverse_klass.relations.values.count do |meta|
meta.as == as
end > 1)
end
inverse_foreign_key()
click to toggle source
Used for relational many to many only. This determines the name of the
foreign key field on the inverse side of the relation, since in this case
there are keys on both sides.
@example Find the inverse foreign key
metadata.inverse_foreign_key
@return [ String ] The foreign key on the inverse.
@since 2.0.0.rc.1
def inverse_foreign_key
@inverse_foreign_key ||= determine_inverse_foreign_key
end
inverse_klass()
click to toggle source
Returns the inverse class of the proxied relation.
@example Get the inverse class.
metadata.inverse_klass
@return [ Class ] The class of the inverse of the relation.
@since 2.0.0.rc.1
def inverse_klass
@inverse_klass ||= inverse_class_name.constantize
end
inverse_of()
click to toggle source
Returns the inverse_of
option of the relation.
@example Get the inverse_of
option.
metadata.inverse_of
@return [ true, false ] The inverse_of option.
@since 2.1.0
def inverse_of
self[:inverse_of]
end
inverse_of?()
click to toggle source
Does the metadata have a inverse_of option?
@example Is an inverse_of
defined?
metadata.inverse_of?
@return [ true, false ] If the relation has an inverse_of defined.
@since 2.1.0
def inverse_of?
!!inverse_of
end
inverse_of_field()
click to toggle source
Returns the name of the field in which to store the name of the inverse
field for the polymorphic relation.
@example Get the name of the field.
metadata.inverse_of_field
@return [ String ] The name of the field for storing the name of the
inverse field.
@since 2.4.5
def inverse_of_field
@inverse_of_field ||= determine_inverse_for(:field)
end
inverse_of_field_setter()
click to toggle source
Gets the setter for the field that stores the name of the inverse field on
a polymorphic relation.
@example Get the inverse type setter.
metadata.inverse_of_field_setter
@return [ String ] The name of the setter.
def inverse_of_field_setter
@inverse_of_field_setter ||= inverse_of_field.__setter__
end
inverse_setter(other = nil)
click to toggle source
Returns the setter for the inverse side of the relation.
@example Get the inverse setter.
metadata.inverse_setter
@param [ Document ] other A document to aid
in the discovery.
@return [ String ] The inverse setter name.
@since 2.0.0.rc.1
def inverse_setter(other = nil)
inverse(other).__setter__
end
inverse_type()
click to toggle source
Returns the name of the field in which to store the name of the class for
the polymorphic relation.
@example Get the name of the field.
metadata.inverse_type
@return [ String ] The name of the field for storing the type.
@since 2.0.0.rc.1
def inverse_type
@inverse_type ||= determine_inverse_for(:type)
end
inverse_type_setter()
click to toggle source
Gets the setter for the field that sets the type of document on a
polymorphic relation.
@example Get the inverse type setter.
metadata.inverse_type_setter
@return [ String ] The name of the setter.
@since 2.0.0.rc.1
def inverse_type_setter
@inverse_type_setter ||= inverse_type.__setter__
end
inverses(other = nil)
click to toggle source
Get the name of the inverse relations if they exists. If this is a
polymorphic relation then just return the :as option that was defined.
@example Get the names of the inverses.
metadata.inverses
@param [ Document ] other The document to
aid in the discovery.
@return [ Array<Symbol> ] The inverse name.
def inverses(other = nil)
if self[:polymorphic]
lookup_inverses(other)
else
@inverses ||= determine_inverses
end
end
key()
click to toggle source
This returns the key that is to be used to grab the attributes for the
relation or the foreign key or id that a referenced relation will use to
query for the object.
@example Get the lookup key.
metadata.key
@return [ String ] The association name, foreign key name, or _id.
@since 2.0.0.rc.1
def key
@key ||= determine_key
end
klass()
click to toggle source
Returns the class of the proxied relation.
@example Get the class.
metadata.klass
@return [ Class ] The class of the relation.
@since 2.0.0.rc.1
def klass
@klass ||= class_name.constantize
end
macro()
click to toggle source
Returns the macro for the relation of this metadata.
@example Get the macro.
metadata.macro
@return [ Symbol ] The macro.
@since 2.0.0.rc.1
def macro
relation.macro
end
many?()
click to toggle source
Is this metadata representing a one to many or many to many relation?
@example Is the relation a many?
metadata.many?
@return [ true, false ] If the relation is a many.
@since 2.1.6
def many?
@many ||= (relation.macro.to_s =~ /many/)
end
name()
click to toggle source
Get the name associated with this metadata.
@example Get the name.
metadata.name
@return [ Symbol ] The name.
@since 2.1.0
name?()
click to toggle source
Is the name defined?
@example Is the name defined?
metadata.name?
@return [ true, false ] If the name is defined.
@since 2.1.0
nested_builder(attributes, options)
click to toggle source
Gets a relation nested builder associated with the relation this metadata
is for. Nested builders are used in conjunction with nested attributes.
@example Get the nested builder.
metadata.nested_builder(attributes, options)
@param [ Hash ] attributes The attributes to build the relation with.
@param [ Hash ] options Options for the nested
builder.
@return [ NestedBuilder ] The nested
builder for the relation.
@since 2.0.0.rc.1
def nested_builder(attributes, options)
relation.nested_builder(self, attributes, options)
end
options()
click to toggle source
Returns the metadata itself. Here for compatibility with Rails association metadata.
@example Get the options.
metadata.options
@return [ Metadata ] self.
@since 2.4.6
order()
click to toggle source
Returns default order for this association.
@example Get default order
metadata.order
@return [ Criterion::Complex, nil] nil if doesn't set
@since 2.1.0
def order
self[:order]
end
order?()
click to toggle source
Is a default order set?
@example Is the order set?
metadata.order?
@return [ true, false ] If the order is set.
@since 2.1.0
path(document)
click to toggle source
Get the path calculator for the supplied document.
@example Get the path calculator.
metadata.path(document)
@param [ Document ] document The document to
calculate on.
@return [ Object ] The atomic path
calculator.
@since 2.1.0
def path(document)
relation.path(document)
end
polymorphic?()
click to toggle source
Returns true if the relation is polymorphic.
@example Is the relation polymorphic?
metadata.polymorphic?
@return [ true, false ] True if the relation is polymorphic, false if not.
@since 2.0.0.rc.1
def polymorphic?
@polymorphic ||= (!!self[:as] || !!self[:polymorphic])
end
primary_key()
click to toggle source
Get the primary key field for finding the related document.
@example Get the primary key.
metadata.primary_key
@return [ String ] The primary key field.
@since 3.1.0
def primary_key
@primary_key ||= (self[:primary_key] || "_id").to_s
end
relation()
click to toggle source
Get the relation associated with this metadata.
@example Get the relation.
metadata.relation
@return [ Proxy ] The relation proxy class.
@since 2.1.0
def relation
self[:relation]
end
setter()
click to toggle source
Gets the method name used to set this relation.
@example Get the setter.
metadata = Metadata.new(:name => :person)
metadata.setter # => "person="
@return [ String ] The name plus "=".
@since 2.0.0.rc.1
def setter
@setter ||= "#{name}="
end
store_as()
click to toggle source
Key where embedded document is save. By default is the name of relation
@return [ String ] the name of key where save
@since 3.0.0
def store_as
@store_as ||= (self[:store_as].try(:to_s) || name.to_s)
end
touchable?()
click to toggle source
Is this relation touchable?
@example Is the relation touchable?
metadata.touchable?
@return [ true, false ] If the relation can be touched.
@since 3.0.0
def touchable?
!!self[:touch]
end
type()
click to toggle source
Returns the name of the field in which to store the name of the class for
the polymorphic relation.
@example Get the name of the field.
metadata.inverse_type
@return [ String ] The name of the field for storing the type.
@since 2.0.0.rc.1
def type
@type ||= polymorphic? ? "#{as}_type" : nil
end
type_relation()
click to toggle source
Returns the metadata class types.
@example Get the relation class types.
metadata.type_relation
@return [ Hash ] The hash with relation class types.
@since 3.1.0
def type_relation
{ _type: { "$in" => klass._types }}
end
type_setter()
click to toggle source
Gets the setter for the field that sets the type of document on a
polymorphic relation.
@example Get the inverse type setter.
metadata.inverse_type_setter
@return [ String ] The name of the setter.
@since 2.0.0.rc.1
def type_setter
@type_setter ||= type.__setter__
end
validate?()
click to toggle source
Are we validating this relation automatically?
@example Is automatic validation on?
metadata.validate?
@return [ true, false ] True unless explictly set to false.
@since 2.0.0.rc.1
def validate?
unless self[:validate].nil?
self[:validate]
else
self[:validate] = relation.validation_default
end
end
versioned?()
click to toggle source
Is this relation using Mongoid's internal versioning system?
@example Is this relation versioned?
metadata.versioned?
@return [ true, false ] If the relation uses Mongoid versioning.
@since 2.1.0
def versioned?
!!self[:versioned]
end