@@ -15,6 +15,17 @@ def initialize(attr_name, object_class = Object, permitted_classes: [], unsafe_l
15
15
check_arity_of_constructor
16
16
end
17
17
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
+
18
29
def dump ( obj )
19
30
return if obj . nil?
20
31
@@ -42,11 +53,23 @@ def assert_valid_value(obj, action:)
42
53
43
54
private
44
55
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
46
65
end
47
66
48
67
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
50
73
end
51
74
52
75
def check_arity_of_constructor
0 commit comments