module DataMapper::Property::Discriminator::Model

Public Instance Methods

inherited(model) click to toggle source
Calls superclass method
# File lib/dm-core/property/discriminator.rb, line 15
def inherited(model)
  super  # setup self.descendants
  set_discriminator_scope_for(model)
end
new(*args, &block) click to toggle source
Calls superclass method
# File lib/dm-core/property/discriminator.rb, line 20
def new(*args, &block)
  if args.size == 1 && args.first.kind_of?(Hash)
    discriminator = properties(repository_name).discriminator

    if discriminator_value = args.first[discriminator.name]
      model = discriminator.typecast_to_primitive(discriminator_value)

      if model.kind_of?(Model) && !model.equal?(self)
        return model.new(*args, &block)
      end
    end
  end

  super
end

Private Instance Methods

set_discriminator_scope_for(model) click to toggle source
# File lib/dm-core/property/discriminator.rb, line 38
def set_discriminator_scope_for(model)
  discriminator = self.properties.discriminator
  default_scope = model.default_scope(discriminator.repository_name)
  default_scope.update(discriminator.name => model.descendants.dup << model)
end