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

Ticket #6331: class_inheritable_accessor_fix.diff

File class_inheritable_accessor_fix.diff, 2.0 kB (added by mojombo, 2 years ago)
  • activesupport/test/class_inheritable_attributes_test.rb

    old new  
    137137    assert_equal 'b', @klass.b 
    138138    assert_equal 'B', @sub.b 
    139139  end 
     140   
     141  def test_array_inheritance 
     142    @klass.class_inheritable_accessor :a 
     143    @klass.a = [] 
     144 
     145    @sub = eval("class SubbyArray < @klass; end; SubbyArray") 
     146     
     147    assert_equal [], @klass.a 
     148    assert_equal [], @sub.a 
     149     
     150    @sub.a << :first 
     151     
     152    assert_equal [:first], @sub.a 
     153    assert_equal [], @klass.a 
     154  end 
     155   
     156  def test_array_inheritance 
     157    @klass.class_inheritable_accessor :a 
     158    @klass.a = {} 
     159 
     160    @sub = eval("class SubbyHash < @klass; end; SubbyHash") 
     161     
     162    assert_equal Hash.new, @klass.a 
     163    assert_equal Hash.new, @sub.a 
     164     
     165    @sub.a[:first] = :first 
     166     
     167    assert_equal 1, @sub.a.keys.size 
     168    assert_equal 0, @klass.a.keys.size 
     169  end 
    140170end 
  • activesupport/lib/active_support/core_ext/class/inheritable_attributes.rb

    old new  
    107107  private  
    108108    def inherited_with_inheritable_attributes(child) 
    109109      inherited_without_inheritable_attributes(child) if respond_to?(:inherited_without_inheritable_attributes) 
    110       child.instance_variable_set('@inheritable_attributes', inheritable_attributes.dup) 
     110       
     111      new_inheritable_attributes = {} 
     112      inheritable_attributes.each do |key, value| 
     113        new_inheritable_attributes[key] = value.dup rescue value 
     114      end 
     115       
     116      child.instance_variable_set('@inheritable_attributes', new_inheritable_attributes) 
    111117    end 
    112118 
    113119    alias inherited_without_inheritable_attributes inherited