Ticket #10677: instantiate_fixture_with_class_not_name.diff
| File instantiate_fixture_with_class_not_name.diff, 2.8 kB (added by nwilmes, 8 months ago) |
|---|
-
activerecord/lib/active_record/fixtures.rb
old new 681 681 Dir.entries(@fixture_path).each do |file| 682 682 path = File.join(@fixture_path, file) 683 683 if File.file?(path) and file !~ @file_filter 684 self[file] = Fixture.new(path, @class_name)684 self[file] = Fixture.new(path, model_class) 685 685 end 686 686 end 687 687 end … … 710 710 raise Fixture::FormatError, "Bad data for #{@class_name} fixture named #{name} (nil)" 711 711 end 712 712 713 self[name] = Fixture.new(data, @class_name)713 self[name] = Fixture.new(data, model_class) 714 714 end 715 715 end 716 716 end … … 723 723 reader.each do |row| 724 724 data = {} 725 725 row.each_with_index { |cell, j| data[header[j].to_s.strip] = cell.to_s.strip } 726 self["#{Inflector::underscore(@class_name)}_#{i+=1}"]= Fixture.new(data, @class_name)726 self["#{Inflector::underscore(@class_name)}_#{i+=1}"]= Fixture.new(data, model_class) 727 727 end 728 728 end 729 729 … … 759 759 class FormatError < FixtureError #:nodoc: 760 760 end 761 761 762 attr_reader : class_name762 attr_reader :model_class 763 763 764 def initialize(fixture, class_name)764 def initialize(fixture, model_class) 765 765 case fixture 766 766 when Hash, YAML::Omap 767 767 @fixture = fixture … … 771 771 raise ArgumentError, "Bad fixture argument #{fixture.inspect} during creation of #{class_name} fixture" 772 772 end 773 773 774 @ class_name = class_name774 @model_class = model_class.is_a?(Class) ? model_class : Object.const_get(model_class) rescue nil 775 775 end 776 776 777 def class_name 778 @model_class.nil? ? nil : @model_class.name 779 end 780 777 781 def each 778 782 @fixture.each { |item| yield item } 779 783 end … … 792 796 end 793 797 794 798 def value_list 795 klass = @class_name.constantize rescue nil796 797 799 list = @fixture.inject([]) do |fixtures, (key, value)| 798 col = klass.columns_hash[key] if klass.respond_to?(:ancestors) && klass.ancestors.include?(ActiveRecord::Base)800 col = model_class.columns_hash[key] if model_class.respond_to?(:ancestors) && model_class.ancestors.include?(ActiveRecord::Base) 799 801 fixtures << ActiveRecord::Base.connection.quote(value, col).gsub('[^\]\\n', "\n").gsub('[^\]\\r', "\r") 800 802 end 801 803 list * ', ' 802 804 end 803 805 804 806 def find 805 klass = @class_name.is_a?(Class) ? @class_name : Object.const_get(@class_name) rescue nil 806 if klass 807 klass.find(self[klass.primary_key]) 807 if model_class 808 model_class.find(self[model_class.primary_key]) 808 809 else 809 raise FixtureClassNotFound, " The class #{@class_name.inspect} was not found."810 raise FixtureClassNotFound, "No class attached to find." 810 811 end 811 812 end 812 813