Class: DataMapper::Types::Discriminator
- Inherits:
-
DataMapper::Type
- Object
- DataMapper::Type
- DataMapper::Types::Discriminator
- Defined in:
- lib/dm-core/types/discriminator.rb
Constant Summary
Constants inherited from DataMapper::Type
DataMapper::Type::PROPERTY_OPTIONS
Class Method Summary collapse
- .bind(property) ⇒ Object private
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 |