class ActiveMongoid::Associations::Metadata

Public Class Methods

new(properties = {}) click to toggle source
# File lib/active_mongoid/associations/metadata.rb, line 15
def initialize(properties = {})
  merge!(properties)
end

Public Instance Methods

as() click to toggle source
# File lib/active_mongoid/associations/metadata.rb, line 7
def as
  self[:as]
end
as?() click to toggle source
# File lib/active_mongoid/associations/metadata.rb, line 11
def as?
  !!as
end
autosave() click to toggle source
# File lib/active_mongoid/associations/metadata.rb, line 19
def autosave
  self[:autosave]
end
autosave?() click to toggle source
# File lib/active_mongoid/associations/metadata.rb, line 23
def autosave?
  !!autosave
end
builder(base, object) click to toggle source
# File lib/active_mongoid/associations/metadata.rb, line 27
def builder(base, object)
  relation.builder(base, self, object)
end
class_name() click to toggle source
# File lib/active_mongoid/associations/metadata.rb, line 82
def class_name
  (self[:class_name] || name.to_s.singularize.titleize.delete(' ')).sub(/\A::/,"")
end
criteria(object, type = nil) click to toggle source
# File lib/active_mongoid/associations/metadata.rb, line 35
def criteria(object, type = nil)
  query = relation.criteria(self, object, type)
  if order
    query = query.respond_to?(:order_by) ? query.order_by(order) : query.order(order)
  end
  query
end
dependent() click to toggle source
# File lib/active_mongoid/associations/metadata.rb, line 195
def dependent
  self[:dependent]
end
destructive?() click to toggle source
# File lib/active_mongoid/associations/metadata.rb, line 199
def destructive?
  @destructive ||= (dependent == :delete || dependent == :destroy)
end
determine_foreign_key() click to toggle source
# File lib/active_mongoid/associations/metadata.rb, line 67
def determine_foreign_key
  return self[:foreign_key].to_s if self[:foreign_key]

  if relation.stores_foreign_key?
    relation.foreign_key(name)
  else
    inverse_metadata.foreign_key
  end
end
determine_inverse_for(field) click to toggle source
# File lib/active_mongoid/associations/metadata.rb, line 135
def determine_inverse_for(field)
  relation.stores_foreign_key? && polymorphic? ? "#{name}_#{field}" : nil
end
determine_inverse_relation() click to toggle source
# File lib/active_mongoid/associations/metadata.rb, line 171
def determine_inverse_relation
  default = foreign_key_match || klass.am_relations[inverse_klass.name.underscore]
  return default.name if default
  klass.am_relations.each_pair do |key, meta|
    next if meta.name == name
    if meta.class_name == inverse_class_name
      return key.to_sym
    end
  end
  return nil
end
determine_inverses() click to toggle source
# File lib/active_mongoid/associations/metadata.rb, line 161
def determine_inverses
  return [ inverse_of ] if has_key?(:inverse_of)
  return [ as ] if has_key?(:as)
  [ inverse_relation ]
end
determine_key() click to toggle source
# File lib/active_mongoid/associations/metadata.rb, line 59
def determine_key
  relation.stores_foreign_key? ? foreign_key : primary_key
end
foreign_key() click to toggle source
# File lib/active_mongoid/associations/metadata.rb, line 47
def foreign_key
  @foreign_key ||= determine_foreign_key
end
foreign_key_match() click to toggle source
# File lib/active_mongoid/associations/metadata.rb, line 183
def foreign_key_match
  if fk = self[:foreign_key]
    relations_metadata.detect do |meta|
      fk == meta.foreign_key if meta.stores_foreign_key?
    end
  end
end
foreign_key_setter() click to toggle source
# File lib/active_mongoid/associations/metadata.rb, line 51
def foreign_key_setter
  @foreign_key_setter ||= "#{foreign_key}="
end
inverse(other = nil) click to toggle source
# File lib/active_mongoid/associations/metadata.rb, line 143
def inverse(other = nil)
  invs = inverses(other)
  invs.first if invs.count == 1
end
inverse_class_name() click to toggle source
# File lib/active_mongoid/associations/metadata.rb, line 106
def inverse_class_name
  self[:as] || self[:inverse_class_name]
end
inverse_klass() click to toggle source
# File lib/active_mongoid/associations/metadata.rb, line 102
def inverse_klass
  @inverse_klass ||= inverse_class_name.constantize if inverse_class_name
end
inverse_metadata(object = nil) click to toggle source
# File lib/active_mongoid/associations/metadata.rb, line 156
def inverse_metadata(object = nil)
  object = object || object_class
  object.reflect_on_am_association(inverse(object))
end
inverse_of() click to toggle source
# File lib/active_mongoid/associations/metadata.rb, line 148
def inverse_of
  self[:inverse_of]
end
inverse_relation() click to toggle source
# File lib/active_mongoid/associations/metadata.rb, line 167
def inverse_relation
  @inverse_relation ||= determine_inverse_relation
end
inverse_setter(other = nil) click to toggle source
# File lib/active_mongoid/associations/metadata.rb, line 152
def inverse_setter(other = nil)
  "#{inverse(other)}="
end
inverse_type() click to toggle source
# File lib/active_mongoid/associations/metadata.rb, line 139
def inverse_type
  @inverse_type ||= determine_inverse_for(:type)
end
inverse_type_setter() click to toggle source
# File lib/active_mongoid/associations/metadata.rb, line 223
def inverse_type_setter
  @inverse_type_setter ||= "#{inverse_type}="
end
inverses(other = nil) click to toggle source
# File lib/active_mongoid/associations/metadata.rb, line 110
def inverses(other = nil)
  if self[:polymorphic]
    lookup_inverses(other)
  else
    @inverses ||= determine_inverses
  end
end
key() click to toggle source
# File lib/active_mongoid/associations/metadata.rb, line 43
def key
  relation.stores_foreign_key? ? foreign_key : primary_key
end
klass()
Alias for: object_class
lookup_inverses(other) click to toggle source
# File lib/active_mongoid/associations/metadata.rb, line 122
def lookup_inverses(other)
  return [ inverse_of ] if inverse_of
  if other
    matches = []
    other.class.am_relations.values.each do |meta|
      if meta.as.to_s == name && meta.class_name == inverse_class_name
        matches.push(meta.name)
      end
    end
    matches
  end
end
name() click to toggle source
# File lib/active_mongoid/associations/metadata.rb, line 86
def name
  self[:name].to_s
end
object_class() click to toggle source
# File lib/active_mongoid/associations/metadata.rb, line 77
def object_class
  class_name.constantize
end
Also aliased as: klass
object_name() click to toggle source
# File lib/active_mongoid/associations/metadata.rb, line 90
def object_name
  name.to_s.singularize
end
order() click to toggle source
# File lib/active_mongoid/associations/metadata.rb, line 31
def order
  self[:order]
end
plural_anme() click to toggle source
# File lib/active_mongoid/associations/metadata.rb, line 94
def plural_anme
  name.to_s.pluralize
end
polymorphic?() click to toggle source
# File lib/active_mongoid/associations/metadata.rb, line 118
def polymorphic?
  @polymorphic ||= (!!self[:as] || !!self[:polymorphic])
end
primary_key() click to toggle source
# File lib/active_mongoid/associations/metadata.rb, line 63
def primary_key
  @primary_key ||= (self[:primary_key] || primary_key_default)
end
relation() click to toggle source
# File lib/active_mongoid/associations/metadata.rb, line 98
def relation
  self[:relation]
end
relations_metadata() click to toggle source
# File lib/active_mongoid/associations/metadata.rb, line 191
def relations_metadata
  klass.am_relations.values
end
type() click to toggle source
# File lib/active_mongoid/associations/metadata.rb, line 207
def type
  @type ||= polymorphic? ? "#{as}_type" : nil
end
type_setter() click to toggle source
# File lib/active_mongoid/associations/metadata.rb, line 55
def type_setter
  @type_setter ||= "#{type}="
end