method

serialize_argument

Importance_0
v7.1.3.4 - Show latest stable - 0 notes - Class: Arguments
serialize_argument(argument) private

No documentation

This method has no description. You can help the Ruby on Rails community by adding new notes.

Hide source
# 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
Register or log in to add new notes.