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 137 137 assert_equal 'b', @klass.b 138 138 assert_equal 'B', @sub.b 139 139 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 140 170 end -
activesupport/lib/active_support/core_ext/class/inheritable_attributes.rb
old new 107 107 private 108 108 def inherited_with_inheritable_attributes(child) 109 109 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) 111 117 end 112 118 113 119 alias inherited_without_inheritable_attributes inherited