Module: DataMapper::Is::Polymorphic

Defined in:
lib/dm-polymorphic.rb

Instance Method Summary collapse

Instance Method Details

#is_polymorphic(name, id_type = String) ⇒ Object



12
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
# File 'lib/dm-polymorphic.rb', line 12

def is_polymorphic(name, id_type=String)
  self.class_eval "    property :\"\#{name}_class\", Klass\n    property :\"\#{name}_id\",    \#{id_type}\n    \n    def \#{name}\n      return nil if self.\#{name}_class.nil? || self.\#{name}_class == NilClass\n      return nil if self.\#{name}_id.nil?\n      if (self.\#{name}_class.class == Class)\n        self.\#{name}_class.get(self.\#{name}_id)\n      else\n        klass = Kernel.const_get(self.\#{name}_class.to_s)\n        if klass.ancestors.include? DataMapper::Resource\n          klass.get(self.\#{name}_id)\n        else\n          nil\n        end\n      end\n    end        \n\n    def \#{name}=(entity)\n      self.\#{name}_class = entity.class\n      self.\#{name}_id = entity.id\n    end        \n  EOS\nend\n", __FILE__, __LINE__