Class: DataMapper::Types::Discriminator

Inherits:
DataMapper::Type show all
Defined in:
lib/gems/dm-core-0.9.9/lib/dm-core/types/discriminator.rb

Constant Summary

Constants inherited from DataMapper::Type

DataMapper::Type::PROPERTY_OPTIONS, DataMapper::Type::PROPERTY_OPTION_ALIASES

Class Method Summary collapse

Methods inherited from DataMapper::Type

configure, dump, inherited, load, options, primitive

Class Method Details

.bind(property) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/gems/dm-core-0.9.9/lib/dm-core/types/discriminator.rb', line 9

def self.bind(property)
  model = property.model

  model.class_eval "    def self.descendants\n      (@descendants ||= []).uniq!\n      @descendants\n    end\n\n    after_class_method :inherited, :add_scope_for_discriminator\n\n    def self.add_scope_for_discriminator(retval, target)\n      target.descendants << target\n      target.default_scope.update(\#{property.name.inspect} => target.descendants)\n      propagate_descendants(target)\n    end\n\n    def self.propagate_descendants(target)\n      descendants << target\n      superclass.propagate_descendants(target) if superclass.respond_to?(:propagate_descendants)\n    end\n  EOS\nend\n", __FILE__, __LINE__