Module: Bipolar::ClassMethods

Defined in:
lib/bipolar.rb

Instance Method Summary collapse

Instance Method Details

#associated_klass(name) ⇒ Object



59
60
61
# File 'lib/bipolar.rb', line 59

def associated_klass(name)
  name.to_s.singularize.camelize.constantize
end

#embedded_klass(name) ⇒ Object



63
64
65
66
67
68
69
70
71
72
73
# File 'lib/bipolar.rb', line 63

def embedded_klass(name)
  if !Bipolar::Embedded.const_defined? associated_klass(name).to_s
    associated_klass(name).class_eval "      class Bipolar::Embedded::\#{associated_klass(name)} < self\n        include MongoMapper::EmbeddedDocument\n      end\n    EOF\n  end\n  \n  Bipolar::Embedded.const_get associated_klass(name).to_s\nend\n"

#embeds_many(name, options = {}) ⇒ Object



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/bipolar.rb', line 35

def embeds_many name, options = {}
  many "embedded_#{name}", options.reverse_merge(:class => embedded_klass(name), :in => name)

  class_eval "    def \#{name}\n      (embedded_\#{name} || []).map do |e|\n        #self.class.associated_klass(\"\#{name}\").new e.attributes\n         e\n      end\n    end\n    \n    def \#{name}= val\n      if val.nil?\n        self.embedded_\#{name} = []\n      else\n        self.embedded_\#{name} = val.map do |v|          \n          self.class.embedded_klass(v.class).new(v.attributes)\n        end\n      end\n    end\n  EOF\nend\n"

#embeds_one(name, options = {}) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/bipolar.rb', line 12

def embeds_one name, options = {}
  one "embedded_#{name}", options.reverse_merge(:class => embedded_klass(name), :in => name)

  class_eval "    def \#{name}\n      if embedded_\#{name}.attributes.nil?\n        nil\n      else\n        # self.class.associated_klass(\"\#{name}\").new embedded_\#{name}.attributes\n         embedded_\#{name}\n      end\n    end\n\n    def \#{name}= val\n      if val.nil?\n        self.embedded_\#{name} = nil\n      else\n        self.embedded_\#{name} = self.class.embedded_klass(val.class).new(val.attributes)\n      end \n    end \n  EOF\nend\n"