Sha256: e1c0f75530de990015fe467a593051123b809e57aa786b6b70a7997877e30663
Contents?: true
Size: 1.48 KB
Versions: 2
Compression:
Stored size: 1.48 KB
Contents
require 'dm-core/type' module DataMapper module Types class Discriminator < Type primitive Class default lambda { |resource, property| resource.model } required true # @api private 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 <<-RUBY, __FILE__, __LINE__ + 1 extend Chainable extendable do def inherited(model) super # setup self.descendants set_discriminator_scope_for(model) end def new(*args, &block) if args.size == 1 && args.first.kind_of?(Hash) discriminator = properties(repository_name).discriminator model = discriminator.typecast(args.first[discriminator.name]) if model.kind_of?(Model) && !model.equal?(self) return model.new(*args, &block) end end super end private def set_discriminator_scope_for(model) model.default_scope(#{repository_name.inspect}).update(#{property_name.inspect} => model.descendants.dup << model) end end RUBY end end # class Discriminator end # module Types end # module DataMapper
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
dm-core-1.0.2 | lib/dm-core/types/discriminator.rb |
dm-core-1.0.1 | lib/dm-core/types/discriminator.rb |