Class: DataMapper::Types::Discriminator

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

Constant Summary

Constants inherited from DataMapper::Type

DataMapper::Type::PROPERTY_OPTIONS

Class Method Summary collapse

Methods inherited from DataMapper::Type

configure, dump, inherited, load, nullable, options, primitive

Class Method Details

.bind(property) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



11
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
38
39
40
41
42
43
44
45
46
47
# File 'lib/dm-core/types/discriminator.rb', line 11

def self.bind(property)
  repository_name = property.repository_name
  model           = property.model
  property_name   = property.name

  model.default_scope(repository_name).update(property_name => model.descendants.dup << model)

  model.class_eval "extend Chainable\n\nextendable do\ndef inherited(model)\nsuper  # setup self.descendants\nset_discriminator_scope_for(model)\nend\n\ndef new(*args, &block)\nif args.size == 1 && args.first.kind_of?(Hash)\ndiscriminator = properties(repository_name).discriminator\nmodel         = discriminator.typecast(args.first[discriminator.name])\n\nif model.kind_of?(Model) && !model.equal?(self)\nreturn model.new(*args, &block)\nend\nend\n\nsuper\nend\n\nprivate\n\ndef set_discriminator_scope_for(model)\nmodel.default_scope(\#{repository_name.inspect}).update(\#{property_name.inspect} => model.descendants.dup << model)\nend\nend\n", __FILE__, __LINE__ + 1
end