Ruby on Rails | Screencasts | Download | Documentation | Weblog | Community | Source

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  
    681681        Dir.entries(@fixture_path).each do |file| 
    682682          path = File.join(@fixture_path, file) 
    683683          if File.file?(path) and file !~ @file_filter 
    684             self[file] = Fixture.new(path, @class_name
     684            self[file] = Fixture.new(path, model_class
    685685          end 
    686686        end 
    687687      end 
     
    710710              raise Fixture::FormatError, "Bad data for #{@class_name} fixture named #{name} (nil)" 
    711711            end 
    712712 
    713             self[name] = Fixture.new(data, @class_name
     713            self[name] = Fixture.new(data, model_class
    714714          end 
    715715        end 
    716716      end 
     
    723723      reader.each do |row| 
    724724        data = {} 
    725725        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
    727727      end 
    728728    end 
    729729 
     
    759759  class FormatError < FixtureError #:nodoc: 
    760760  end 
    761761 
    762   attr_reader :class_name 
     762  attr_reader :model_class 
    763763 
    764   def initialize(fixture, class_name
     764  def initialize(fixture, model_class
    765765    case fixture 
    766766      when Hash, YAML::Omap 
    767767        @fixture = fixture 
     
    771771        raise ArgumentError, "Bad fixture argument #{fixture.inspect} during creation of #{class_name} fixture" 
    772772    end 
    773773 
    774     @class_name = class_name 
     774    @model_class = model_class.is_a?(Class) ? model_class : Object.const_get(model_class) rescue nil 
    775775  end 
    776776 
     777  def class_name 
     778    @model_class.nil? ? nil : @model_class.name 
     779  end 
     780 
    777781  def each 
    778782    @fixture.each { |item| yield item } 
    779783  end 
     
    792796  end 
    793797 
    794798  def value_list 
    795     klass = @class_name.constantize rescue nil 
    796  
    797799    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) 
    799801      fixtures << ActiveRecord::Base.connection.quote(value, col).gsub('[^\]\\n', "\n").gsub('[^\]\\r', "\r") 
    800802    end 
    801803    list * ', ' 
    802804  end 
    803805 
    804806  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]) 
    808809    else 
    809       raise FixtureClassNotFound, "The class #{@class_name.inspect} was not found." 
     810      raise FixtureClassNotFound, "No class attached to find." 
    810811    end 
    811812  end 
    812813