Skip to content

Commit e57e462

Browse files
ActiveJob: fallback serializing String subclasses
rails#50090 broke serialization of String subclasses that don't have serializers, like ActiveSupport::SafeBuffer. Co-authored-by: John Hawthorn <[email protected]>
1 parent 5d0ab55 commit e57e462

File tree

2 files changed

+16
-1
lines changed

2 files changed

+16
-1
lines changed

activejob/lib/active_job/arguments.rb

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,11 @@ def serialize_argument(argument)
7676
if argument.class == String
7777
argument
7878
else
79-
Serializers.serialize(argument)
79+
begin
80+
Serializers.serialize(argument)
81+
rescue SerializationError
82+
argument
83+
end
8084
end
8185
when GlobalID::Identification
8286
convert_to_global_id_hash(argument)

activejob/test/cases/argument_serialization_test.rb

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,9 @@ def klass
4242
end
4343
end
4444

45+
class StringWithoutSerializer < String
46+
end
47+
4548
setup do
4649
@person = Person.find("5")
4750
end
@@ -156,6 +159,14 @@ def klass
156159
ActiveJob::Serializers._additional_serializers = original_serializers
157160
end
158161

162+
test "serialize a String subclass object without a serializer" do
163+
string_without_serializer = StringWithoutSerializer.new("foo")
164+
serialized = ActiveJob::Arguments.serialize([string_without_serializer])
165+
deserialized = ActiveJob::Arguments.deserialize(JSON.load(JSON.dump(serialized))).first
166+
assert_instance_of String, deserialized
167+
assert_equal string_without_serializer, deserialized
168+
end
169+
159170
test "serialize a hash" do
160171
symbol_key = { a: 1 }
161172
string_key = { "a" => 1 }

0 commit comments

Comments
 (0)