From 6af8cab37dfeb7aa1b0230399fddf239e6aac590 Mon Sep 17 00:00:00 2001 From: Dawid Marcin Grzesiak Date: Mon, 29 Mar 2010 13:14:19 +0200 Subject: [PATCH] don't set default scope for discriminator's root model --- lib/dm-core/model.rb | 2 +- lib/dm-core/types/discriminator.rb | 2 -- spec/public/types/discriminator_spec.rb | 12 +++--------- 3 files changed, 4 insertions(+), 12 deletions(-) diff --git a/lib/dm-core/model.rb b/lib/dm-core/model.rb index eb0283f7..d32caf76 100644 --- a/lib/dm-core/model.rb +++ b/lib/dm-core/model.rb @@ -548,7 +548,7 @@ def load(records, query) record = record.dup field_map.each { |property, field| record[property] = record.delete(field) if record.key?(field) } - model = discriminator && (klass = record[discriminator]) && discriminator.typecast(klass) || self + model = discriminator && discriminator.typecast(record[discriminator]) || self model_key = model.key(repository_name) resource = if model_key.valid?(key_values = record.values_at(*model_key)) diff --git a/lib/dm-core/types/discriminator.rb b/lib/dm-core/types/discriminator.rb index 12d0c1f9..46e31afe 100644 --- a/lib/dm-core/types/discriminator.rb +++ b/lib/dm-core/types/discriminator.rb @@ -13,8 +13,6 @@ def self.bind(property) model = property.model property_name = property.name - model.default_scope(repository_name).update(property_name => model.descendants) - model.class_eval <<-RUBY, __FILE__, __LINE__ + 1 extend Chainable diff --git a/spec/public/types/discriminator_spec.rb b/spec/public/types/discriminator_spec.rb index 786c8442..f84db39d 100644 --- a/spec/public/types/discriminator_spec.rb +++ b/spec/public/types/discriminator_spec.rb @@ -3,18 +3,12 @@ describe DataMapper::Types::Discriminator do before :all do module ::Blog - class NewDiscriminator < DataMapper::Types::Discriminator - primitive Class - default lambda { |resource, property| resource.model } - required true - end - class Article include DataMapper::Resource property :id, Serial property :title, String, :required => true - property :type, NewDiscriminator + property :type, Discriminator end class Announcement < Article; end @@ -89,8 +83,8 @@ class Release < Announcement; end end describe 'Model#default_scope' do - it 'should set the default scope for the grandparent model' do - @article_model.default_scope[:type].should equal(@article_model.descendants) + it "shouldn't set the default scope for root model if you want all descendants anyway" do + @article_model.default_scope[:type].should be_nil end it 'should set the default scope for the parent model' do