method
serialize_argument
v7.1.3.4 -
Show latest stable
- Class:
ActiveJob::Arguments
serialize_argument(argument)private
No documentation available.
# File activejob/lib/active_job/arguments.rb, line 71
def serialize_argument(argument)
case argument
when nil, true, false, Integer, Float # Types that can hardly be subclassed
argument
when String
if argument.class == String
argument
else
begin
Serializers.serialize(argument)
rescue SerializationError
argument
end
end
when GlobalID::Identification
convert_to_global_id_hash(argument)
when Array
argument.map { |arg| serialize_argument(arg) }
when ActiveSupport::HashWithIndifferentAccess
serialize_indifferent_hash(argument)
when Hash
symbol_keys = argument.each_key.grep(Symbol).map!(&:to_s)
aj_hash_key = if Hash.ruby2_keywords_hash?(argument)
RUBY2_KEYWORDS_KEY
else
SYMBOL_KEYS_KEY
end
result = serialize_hash(argument)
result[aj_hash_key] = symbol_keys
result
else
if argument.respond_to?(:permitted?) && argument.respond_to?(:to_h)
serialize_indifferent_hash(argument.to_h)
elsif BigDecimal === argument && !ActiveJob.use_big_decimal_serializer
ActiveJob.deprecator.warn(<<~MSG)
Primitive serialization of BigDecimal job arguments is deprecated as it may serialize via .to_s using certain queue adapters.
Enable config.active_job.use_big_decimal_serializer to use BigDecimalSerializer instead, which will be mandatory in Rails 7.2.
Note that if your application has multiple replicas, you should only enable this setting after successfully deploying your app to Rails 7.1 first.
This will ensure that during your deployment all replicas are capable of deserializing arguments serialized with BigDecimalSerializer.
MSG
argument
else
Serializers.serialize(argument)
end
end
end