module Mongoid::Alize::Macros

Attributes

alize_from_callbacks[RW]
alize_to_callbacks[RW]

Public Instance Methods

alize(relation, *fields) click to toggle source
# File lib/mongoid/alize/macros.rb, line 7
def alize(relation, *fields)
  alize_from(relation, *fields)
  metadata = self.relations[relation.to_s]
  unless _alize_unknown_inverse?(metadata)
    metadata.klass.alize_to(metadata.inverse, *fields)
  end
end
alize_from(relation, *fields) click to toggle source
# File lib/mongoid/alize/macros.rb, line 15
def alize_from(relation, *fields)
  one, many = _alize_relation_types

  from_one  = Mongoid::Alize::Callbacks::From::One
  from_many = Mongoid::Alize::Callbacks::From::Many

  klass = self
  metadata = klass.relations[relation.to_s]
  relation_superclass = metadata.relation.superclass

  callback_klass =
    case [relation_superclass]
    when [one]  then from_one
    when [many] then from_many
    end

  options = fields.extract_options!
  if options[:fields]
    fields = options[:fields]
  elsif fields.empty? && !_alize_unknown_inverse?(metadata)
    fields = metadata.klass.default_alize_fields
  end

  (klass.alize_from_callbacks ||= []) << callback =
    callback_klass.new(klass, relation, fields)
  callback.attach

end
alize_to(relation, *fields) click to toggle source
# File lib/mongoid/alize/macros.rb, line 44
def alize_to(relation, *fields)
  one, many = _alize_relation_types

  klass = self
  metadata = klass.relations[relation.to_s]
  relation_superclass = metadata.relation.superclass

  options = fields.extract_options!
  if options[:fields]
    fields = options[:fields]
  elsif fields.empty?
    fields = klass.default_alize_fields
  end

  (klass.alize_to_callbacks ||= []) << callback =
    Mongoid::Alize::ToCallback.new(klass, relation, fields)
  callback.attach

end
default_alize_fields() click to toggle source
# File lib/mongoid/alize/macros.rb, line 64
def default_alize_fields
  self.fields.reject { |name, field|
    name =~ /^_/
  }.keys
end

Private Instance Methods

_alize_relation_types() click to toggle source
# File lib/mongoid/alize/macros.rb, line 78
def _alize_relation_types
  one  = Mongoid::Relations::One
  many = Mongoid::Relations::Many

  def (many).==(klass)
    [Mongoid::Relations::Many,
     Mongoid::Relations::Referenced::Many].map(&:name).include?(klass.name)
  end

  [one, many]
end
_alize_unknown_inverse?(metadata) click to toggle source
# File lib/mongoid/alize/macros.rb, line 72
def _alize_unknown_inverse?(metadata)
  (metadata.polymorphic? && metadata.stores_foreign_key?) ||
    metadata.klass.nil? ||
    metadata.inverse.nil?
end