Module: Mongoid::Max::Denormalize::ClassMethods

Defined in:
lib/mongoid/max/denormalize.rb

Instance Method Summary collapse

Instance Method Details

#denormalize(relation, *fields) ⇒ Object

Raises:



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/mongoid/max/denormalize.rb', line 13

def denormalize(relation, *fields)
  options = fields.extract_options!

  #TODO make all real fields if fields.empty?

#          puts "#relation : #{relation.inspect}"
#          puts "#fields   : #{fields.inspect}"
#          puts "#options  : #{options.inspect}"

  meta = self.relations[relation.to_s]
  raise ConfigError.new("Unknown relation", self, relation) if meta.nil?
#          puts "#        meta : #{meta.inspect}"

  inverse_meta = meta.klass.relations[meta.inverse.to_s]
  raise ConfigError.new("Unknown inverse relation", self, relation) if inverse_meta.nil?
#          puts "#inverse_meta : #{inverse_meta.inspect}"


  if meta.relation == Mongoid::Relations::Referenced::In && inverse_meta.relation == Mongoid::Relations::Referenced::Many
    OneToMany.new(self, meta, inverse_meta, fields, options).attach
  elsif meta.relation == Mongoid::Relations::Referenced::Many && inverse_meta.relation == Mongoid::Relations::Referenced::In
    ManyToOne.new(self, meta, inverse_meta, fields, options).attach
  else
    raise ConfigError.new("Relation not supported", self, relation)
  end

end