From 426186718b75bcac550cac15d01007bb614f5ef4 Mon Sep 17 00:00:00 2001 From: Bruno Michel Date: Sun, 29 Mar 2009 20:27:07 +0200 Subject: [PATCH] Fix default_scope with a condition for new objects --- activerecord/lib/active_record/base.rb | 2 +- activerecord/test/cases/method_scoping_test.rb | 18 ++++++++++++++++++ activerecord/test/models/developer.rb | 10 ++++++++++ 3 files changed, 29 insertions(+), 1 deletions(-) diff --git a/activerecord/lib/active_record/base.rb b/activerecord/lib/active_record/base.rb index 9943a70..40aec81 100755 --- a/activerecord/lib/active_record/base.rb +++ b/activerecord/lib/active_record/base.rb @@ -2171,7 +2171,7 @@ module ActiveRecord #:nodoc: # default_scope :order => 'last_name, first_name' # end def default_scope(options = {}) - self.default_scoping << { :find => options, :create => (options.is_a?(Hash) && options.has_key?(:conditions)) ? options[:conditions] : {} } + self.default_scoping << { :find => options, :create => (options.is_a?(Hash) && options.has_key?(:conditions) && options[:conditions].is_a?(Hash)) ? options[:conditions] : {} } end # Test whether the given method and optional key are scoped. diff --git a/activerecord/test/cases/method_scoping_test.rb b/activerecord/test/cases/method_scoping_test.rb index 3c34cde..40d8eb1 100644 --- a/activerecord/test/cases/method_scoping_test.rb +++ b/activerecord/test/cases/method_scoping_test.rb @@ -647,6 +647,24 @@ class DefaultScopingTest < ActiveRecord::TestCase received = DeveloperOrderedBySalary.find(:all, :order => 'salary').collect { |dev| dev.salary } assert_equal expected, received end + + def test_default_scope_for_new_objects + received = DeveloperNamedDavid.new.name + assert_equal 'David', received + assert_nil DeveloperNamedJamis.new.name + end + + def test_default_scope_with_hash_conditions + expected = Developer.all(:conditions => {:name => 'David'}).collect { |dev| dev.salary } + received = DeveloperNamedDavid.all.collect { |dev| dev.salary } + assert_equal expected, received + end + + def test_default_scope_with_string_conditions + expected = Developer.all(:conditions => "name LIKE '%Jamis%'").collect { |dev| dev.salary } + received = DeveloperNamedJamis.all.collect { |dev| dev.salary } + assert_equal expected, received + end end =begin diff --git a/activerecord/test/models/developer.rb b/activerecord/test/models/developer.rb index 92039a4..a4bec83 100644 --- a/activerecord/test/models/developer.rb +++ b/activerecord/test/models/developer.rb @@ -89,3 +89,13 @@ class DeveloperOrderedBySalary < ActiveRecord::Base end end end + +class DeveloperNamedDavid < ActiveRecord::Base + self.table_name = 'developers' + default_scope :conditions => {:name => 'David'} +end + +class DeveloperNamedJamis < ActiveRecord::Base + self.table_name = 'developers' + default_scope :conditions => "name LIKE '%Jamis%'" +end -- 1.5.6.3 From 343e2f6231a8c9f28d55982c263d70bf8f80b9dd Mon Sep 17 00:00:00 2001 From: Bruno Michel Date: Mon, 30 Mar 2009 23:52:06 +0200 Subject: [PATCH] A new test case for default_scope --- activerecord/test/cases/method_scoping_test.rb | 6 ++++++ activerecord/test/models/developer.rb | 1 + 2 files changed, 7 insertions(+), 0 deletions(-) diff --git a/activerecord/test/cases/method_scoping_test.rb b/activerecord/test/cases/method_scoping_test.rb index 40d8eb1..09b8fb3 100644 --- a/activerecord/test/cases/method_scoping_test.rb +++ b/activerecord/test/cases/method_scoping_test.rb @@ -665,6 +665,12 @@ class DefaultScopingTest < ActiveRecord::TestCase received = DeveloperNamedJamis.all.collect { |dev| dev.salary } assert_equal expected, received end + + def test_merging_default_scope_with_named_scope_conditions + expected = Developer.all(:conditions => {:name => 'Jamis'}).collect { |dev| dev.salary } + received = DeveloperNamedJamis.jamises.collect { |dev| dev.salary } + assert_equal expected, received + end end =begin diff --git a/activerecord/test/models/developer.rb b/activerecord/test/models/developer.rb index a4bec83..eb8099d 100644 --- a/activerecord/test/models/developer.rb +++ b/activerecord/test/models/developer.rb @@ -98,4 +98,5 @@ end class DeveloperNamedJamis < ActiveRecord::Base self.table_name = 'developers' default_scope :conditions => "name LIKE '%Jamis%'" + named_scope :jamises, :conditions => {:name => 'Jamis'} end -- 1.5.6.3