aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--activerecord/CHANGELOG2
-rwxr-xr-xactiverecord/lib/active_record/fixtures.rb9
-rwxr-xr-xactiverecord/test/fixtures_test.rb17
3 files changed, 20 insertions, 8 deletions
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 <jonathan@bluewire.net.nz>]
* 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