From c18492bc44093611190e18fc0104ebf0164fc619 Mon Sep 17 00:00:00 2001 From: Rhett Sutphin Date: Tue, 6 May 2008 10:56:45 -0500 Subject: [PATCH] Fix to use fixture accessors when the fixture name is not the same as the table name --- activerecord/lib/active_record/fixtures.rb | 7 +++-- activerecord/test/cases/fixtures_test.rb | 29 ++++++++++++++++++++++++++ activerecord/test/fixtures/unfunny_jokes.yml | 3 ++ activerecord/test/models/stupid_joke.rb | 2 + activerecord/test/schema/schema.rb | 4 +++ 5 files changed, 42 insertions(+), 3 deletions(-) create mode 100644 activerecord/test/fixtures/unfunny_jokes.yml create mode 100644 activerecord/test/models/stupid_joke.rb diff --git a/activerecord/lib/active_record/fixtures.rb b/activerecord/lib/active_record/fixtures.rb index 7d5fd35..79ea1cd 100755 --- a/activerecord/lib/active_record/fixtures.rb +++ b/activerecord/lib/active_record/fixtures.rb @@ -540,10 +540,11 @@ class Fixtures < (RUBY_VERSION < '1.9' ? YAML::Omap : Hash) label.to_s.hash.abs end - attr_reader :table_name + attr_reader :table_name, :name def initialize(connection, table_name, class_name, fixture_path, file_filter = DEFAULT_FILTER_RE) @connection, @table_name, @fixture_path, @file_filter = connection, table_name, fixture_path, file_filter + @name = table_name # preserve fixture base name @class_name = class_name || (ActiveRecord::Base.pluralize_table_names ? @table_name.singularize.camelize : @table_name.camelize) @table_name = ActiveRecord::Base.table_name_prefix + @table_name + ActiveRecord::Base.table_name_suffix @@ -962,9 +963,9 @@ module Test #:nodoc: fixtures = Fixtures.create_fixtures(fixture_path, fixture_table_names, fixture_class_names) unless fixtures.nil? if fixtures.instance_of?(Fixtures) - @loaded_fixtures[fixtures.table_name] = fixtures + @loaded_fixtures[fixtures.name] = fixtures else - fixtures.each { |f| @loaded_fixtures[f.table_name] = f } + fixtures.each { |f| @loaded_fixtures[f.name] = f } end end end diff --git a/activerecord/test/cases/fixtures_test.rb b/activerecord/test/cases/fixtures_test.rb index 2787b9a..0591c95 100755 --- a/activerecord/test/cases/fixtures_test.rb +++ b/activerecord/test/cases/fixtures_test.rb @@ -15,6 +15,7 @@ require 'models/pirate' require 'models/treasure' require 'models/matey' require 'models/ship' +require 'models/stupid_joke' class FixturesTest < ActiveRecord::TestCase self.use_instantiated_fixtures = true @@ -373,6 +374,34 @@ class CheckSetTableNameFixturesTest < ActiveRecord::TestCase end end +class FixtureNameIsNotTableNameFixturesTest < ActiveRecord::TestCase + set_fixture_class :unfunny_jokes => StupidJoke + fixtures :unfunny_jokes + # Set to false to blow away fixtures cache and ensure our fixtures are loaded + # and thus takes into account our set_fixture_class + self.use_transactional_fixtures = false + + def test_named_accessor + assert_kind_of StupidJoke, unfunny_jokes(:a_joke) + end +end + +class FixtureNameIsNotTableNameMultipleFixturesTest < ActiveRecord::TestCase + set_fixture_class :unfunny_jokes => StupidJoke, :funny_jokes => Joke + fixtures :unfunny_jokes, :funny_jokes + # Set to false to blow away fixtures cache and ensure our fixtures are loaded + # and thus takes into account our set_fixture_class + self.use_transactional_fixtures = false + + def test_named_accessor_of_differently_named_fixture + assert_kind_of StupidJoke, unfunny_jokes(:a_joke) + end + + def test_named_accessor_of_same_named_fixture + assert_kind_of Joke, funny_jokes(:a_joke) + end +end + class CustomConnectionFixturesTest < ActiveRecord::TestCase set_fixture_class :courses => Course fixtures :courses diff --git a/activerecord/test/fixtures/unfunny_jokes.yml b/activerecord/test/fixtures/unfunny_jokes.yml new file mode 100644 index 0000000..ce5d8b7 --- /dev/null +++ b/activerecord/test/fixtures/unfunny_jokes.yml @@ -0,0 +1,3 @@ +a_joke: + id: 1 + name: Submarine screen door diff --git a/activerecord/test/models/stupid_joke.rb b/activerecord/test/models/stupid_joke.rb new file mode 100644 index 0000000..4bdaec4 --- /dev/null +++ b/activerecord/test/models/stupid_joke.rb @@ -0,0 +1,2 @@ +class StupidJoke < ActiveRecord::Base +end diff --git a/activerecord/test/schema/schema.rb b/activerecord/test/schema/schema.rb index 818237f..da4f4f8 100644 --- a/activerecord/test/schema/schema.rb +++ b/activerecord/test/schema/schema.rb @@ -152,6 +152,10 @@ ActiveRecord::Schema.define do t.string :name end + create_table :stupid_jokes, :force => true do |t| + t.string :name + end + create_table :items, :force => true do |t| t.column :name, :integer end -- 1.5.4.5