From 2383a60443244dedd4b8708a2ecac922dcffc786 Mon Sep 17 00:00:00 2001 From: Rick Olson Date: Mon, 6 Mar 2006 23:03:35 +0000 Subject: Allow set_fixture_class to take Classes instead of strings for a class in a module. Raise FixtureClassNotFound if a fixture can't load. [Rick Olson] closes #4095 git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@3804 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- activerecord/CHANGELOG | 2 ++ activerecord/lib/active_record/fixtures.rb | 9 +++++++-- activerecord/test/fixtures_test.rb | 17 +++++++++++------ 3 files changed, 20 insertions(+), 8 deletions(-) (limited to 'activerecord') diff --git a/activerecord/CHANGELOG b/activerecord/CHANGELOG index 8672aeec83..0b955165f2 100644 --- a/activerecord/CHANGELOG +++ b/activerecord/CHANGELOG @@ -1,5 +1,7 @@ *SVN* +* Allow set_fixture_class to take Classes instead of strings for a class in a module. Raise FixtureClassNotFound if a fixture can't load. [Rick Olson] + * Fix quoting of inheritance column for STI eager loading #4098 [Jonathan Viney ] * Added smarter table aliasing for eager associations for multiple self joins #3580 [Rick Olson] diff --git a/activerecord/lib/active_record/fixtures.rb b/activerecord/lib/active_record/fixtures.rb index 57d286aecd..71a28f4712 100755 --- a/activerecord/lib/active_record/fixtures.rb +++ b/activerecord/lib/active_record/fixtures.rb @@ -9,6 +9,9 @@ module YAML #:nodoc: end end +class FixtureClassNotFound < ActiveRecord::ActiveRecordError #:nodoc: +end + # Fixtures are a way of organizing data that you want to test against; in short, sample data. They come in 3 flavours: # # 1. YAML fixtures @@ -391,9 +394,11 @@ class Fixture #:nodoc: end def find - if Object.const_defined?(@class_name) - klass = Object.const_get(@class_name) + klass = @class_name.is_a?(Class) ? @class_name : Object.const_get(@class_name) rescue nil + if klass klass.find(self[klass.primary_key]) + else + raise FixtureClassNotFound, "The class #{@class_name.inspect} was not found." end end diff --git a/activerecord/test/fixtures_test.rb b/activerecord/test/fixtures_test.rb index 51f7109645..b1da54b43f 100755 --- a/activerecord/test/fixtures_test.rb +++ b/activerecord/test/fixtures_test.rb @@ -5,6 +5,7 @@ require 'fixtures/company' require 'fixtures/task' require 'fixtures/reply' require 'fixtures/joke' +require 'fixtures/category' class FixturesTest < Test::Unit::TestCase self.use_instantiated_fixtures = true @@ -332,9 +333,13 @@ class SetTableNameFixturesTest < Test::Unit::TestCase assert_kind_of Joke, funny_jokes(:a_joke) end end - - - - - - + +class InvalidTableNameFixturesTest < Test::Unit::TestCase + fixtures :funny_jokes + + def test_raises_error + assert_raises FixtureClassNotFound do + funny_jokes(:a_joke) + end + end +end -- cgit v1.2.3