Skip to content

Commit eed5655

Browse files
committed
Avoid warning when loading YAMLColumn generated by old versions of Rails on Ruby 2.7
1 parent 9000ec2 commit eed5655

File tree

1 file changed

+25
-2
lines changed

1 file changed

+25
-2
lines changed

activerecord/lib/active_record/coders/yaml_column.rb

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,17 @@ def initialize(attr_name, object_class = Object, permitted_classes: [], unsafe_l
1515
check_arity_of_constructor
1616
end
1717

18+
def init_with(coder) # :nodoc:
19+
# This is just to avoid the warning about trying to use instance variables before defining them
20+
# when loading from an YAML generated in a Rails version before 7.1.
21+
#
22+
# This method can be removed when we drop support to Ruby 2.7.
23+
@attr_name = coder["attr_name"]
24+
@object_class = coder["object_class"]
25+
@permitted_classes = coder["permitted_classes"] || []
26+
@unsafe_load = coder["unsafe_load"]
27+
end
28+
1829
def dump(obj)
1930
return if obj.nil?
2031

@@ -42,11 +53,23 @@ def assert_valid_value(obj, action:)
4253

4354
private
4455
def permitted_classes
45-
[*ActiveRecord.yaml_column_permitted_classes, *@permitted_classes]
56+
# This `defined?` check is just to avoid the warning about trying to use instance variables before defining
57+
# them when loading from an Marshal object generated in a Rails version before 7.1.
58+
#
59+
# The `defined?` can be removed when we drop support to Ruby 2.7.
60+
if defined?(@permitted_classes)
61+
ActiveRecord.yaml_column_permitted_classes + @permitted_classes
62+
else
63+
ActiveRecord.yaml_column_permitted_classes
64+
end
4665
end
4766

4867
def unsafe_load?
49-
@unsafe_load.nil? ? ActiveRecord.use_yaml_unsafe_load : @unsafe_load
68+
# This `defined?` check is just to avoid the warning about trying to use instance variables before defining
69+
# them when loading from an Marshal object generated in a Rails version before 7.1.
70+
#
71+
# The `defined?` can be removed when we drop support to Ruby 2.7.
72+
defined?(@unsafe_load) && !@unsafe_load.nil? ? @unsafe_load : ActiveRecord.use_yaml_unsafe_load
5073
end
5174

5275
def check_arity_of_constructor

0 commit comments

Comments
 (0)