diff options
author | David Heinemeier Hansson <david@loudthinking.com> | 2006-02-27 05:14:57 +0000 |
---|---|---|
committer | David Heinemeier Hansson <david@loudthinking.com> | 2006-02-27 05:14:57 +0000 |
commit | 91247b61672c3d136682870558e5068f4c7195f0 (patch) | |
tree | d5abf90c733e952af64795e5666783924ca9c037 /activerecord | |
parent | adccb319e27190a3a90d321db1141a057aec1d38 (diff) | |
download | rails-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/CHANGELOG | 2 | ||||
-rwxr-xr-x | activerecord/lib/active_record/fixtures.rb | 9 | ||||
-rwxr-xr-x | activerecord/test/fixtures_test.rb | 19 | ||||
-rw-r--r-- | activerecord/test/method_scoping_test.rb | 2 |
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 |