aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord
diff options
context:
space:
mode:
authorDavid Heinemeier Hansson <david@loudthinking.com>2006-02-27 05:14:57 +0000
committerDavid Heinemeier Hansson <david@loudthinking.com>2006-02-27 05:14:57 +0000
commit91247b61672c3d136682870558e5068f4c7195f0 (patch)
treed5abf90c733e952af64795e5666783924ca9c037 /activerecord
parentadccb319e27190a3a90d321db1141a057aec1d38 (diff)
downloadrails-91247b61672c3d136682870558e5068f4c7195f0.tar.gz
rails-91247b61672c3d136682870558e5068f4c7195f0.tar.bz2
rails-91247b61672c3d136682870558e5068f4c7195f0.zip
Added that fixtures to placed in subdirectories of the main fixture files are also loaded (closes #3937) [dblack@wobblini.net]
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@3683 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
Diffstat (limited to 'activerecord')
-rw-r--r--activerecord/CHANGELOG2
-rwxr-xr-xactiverecord/lib/active_record/fixtures.rb9
-rwxr-xr-xactiverecord/test/fixtures_test.rb19
-rw-r--r--activerecord/test/method_scoping_test.rb2
4 files changed, 29 insertions, 3 deletions
diff --git a/activerecord/CHANGELOG b/activerecord/CHANGELOG
index 549665f28f..2ca0ffdb20 100644
--- a/activerecord/CHANGELOG
+++ b/activerecord/CHANGELOG
@@ -1,5 +1,7 @@
*SVN*
+* Added that fixtures to placed in subdirectories of the main fixture files are also loaded #3937 [dblack@wobblini.net]
+
* Define attribute query methods to avoid method_missing calls. #3677 [jonathan@bluewire.net.nz]
* ActiveRecord::Base.remove_connection explicitly closes database connections and doesn't corrupt the connection cache. Introducing the disconnect! instance method for the PostgreSQL, MySQL, and SQL Server adapters; implementations for the others are welcome. #3591 [Simon Stapleton, Tom Ward]
diff --git a/activerecord/lib/active_record/fixtures.rb b/activerecord/lib/active_record/fixtures.rb
index 3d2fa3ac71..3254781764 100755
--- a/activerecord/lib/active_record/fixtures.rb
+++ b/activerecord/lib/active_record/fixtures.rb
@@ -286,11 +286,18 @@ class Fixtures < YAML::Omap
end
private
+
def read_fixture_files
if File.file?(yaml_file_path)
# YAML fixtures
begin
- if yaml = YAML::load(erb_render(IO.read(yaml_file_path)))
+ yaml_string = ""
+ Dir["#{@fixture_path}/**/*"].select {|f| test(?f,f) }.each do |subfixture_path|
+ yaml_string << IO.read(subfixture_path)
+ end
+ yaml_string << IO.read(yaml_file_path)
+
+ if yaml = YAML::load(erb_render(yaml_string))
yaml = yaml.value if yaml.respond_to?(:type_id) and yaml.respond_to?(:value)
yaml.each do |name, data|
self[name] = Fixture.new(data, @class_name)
diff --git a/activerecord/test/fixtures_test.rb b/activerecord/test/fixtures_test.rb
index 19664d2d34..29f7b886a9 100755
--- a/activerecord/test/fixtures_test.rb
+++ b/activerecord/test/fixtures_test.rb
@@ -9,7 +9,7 @@ class FixturesTest < Test::Unit::TestCase
self.use_instantiated_fixtures = true
self.use_transactional_fixtures = false
- fixtures :topics, :developers, :accounts, :tasks
+ fixtures :topics, :developers, :accounts, :tasks, :categories
FIXTURES = %w( accounts companies customers
developers developers_projects entrants
@@ -170,6 +170,23 @@ class FixturesTest < Test::Unit::TestCase
end
end
end
+
+ def test_non_yml_file_in_subdirectory
+ assert_equal(categories(:sub_special_1).name, "A special category")
+ assert_equal(categories(:sub_special_1).class, SpecialCategory)
+ end
+
+ def test_yml_file_in_subdirectory
+ assert_equal(categories(:sub_special_3).name, "A special category in a .yml file")
+ assert_equal(categories(:sub_special_3).class, SpecialCategory)
+ end
+
+ def test_subsubdir_file_with_arbitrary_name
+ assert_equal(categories(:sub_special_5).name, "A special category in an arbitrarily named subsubdir file")
+ assert_equal(categories(:sub_special_5).class, SpecialCategory)
+ end
+
+
end
if Account.connection.respond_to?(:reset_pk_sequence!)
diff --git a/activerecord/test/method_scoping_test.rb b/activerecord/test/method_scoping_test.rb
index 8c547e1435..d95fc1dcc8 100644
--- a/activerecord/test/method_scoping_test.rb
+++ b/activerecord/test/method_scoping_test.rb
@@ -295,7 +295,7 @@ class HasAndBelongsToManyScopingTest< Test::Unit::TestCase
end
def test_forwarding_to_dynamic_finders
- assert_equal 1, Category.find_all_by_type('SpecialCategory').size
+ assert_equal 6, Category.find_all_by_type('SpecialCategory').size
assert_equal 0, @welcome.categories.find_all_by_type('SpecialCategory').size
assert_equal 2, @welcome.categories.find_all_by_type('Category').size
end