Module: ActiveJob::Serializers
Do not use. This module is for internal use only.
Overview
The Serializers
module is used to store a list of known serializers and to add new ones. It also has helpers to serialize/deserialize objects.
Class Attribute Summary
-
.serializers
rw
Returns list of known serializers.
- .serializers=(serializers) rw
Class Method Summary
-
.add_serializers(*new_serializers)
Adds new serializers to a list of known serializers.
-
.deserialize(argument)
Returns deserialized object.
-
.serialize(argument)
Returns serialized representative of the passed object.
- .index_serializers private
::ActiveSupport::Autoload
- Extended
Class Attribute Details
.serializers (rw)
Returns list of known serializers.
# File 'activejob/lib/active_job/serializers.rb', line 51
attr_reader :serializers
.serializers=(serializers) (rw)
[ GitHub ]# File 'activejob/lib/active_job/serializers.rb', line 53
def serializers=(serializers) @serializers = serializers index_serializers end
Class Method Details
.add_serializers(*new_serializers)
Adds new serializers to a list of known serializers.
# File 'activejob/lib/active_job/serializers.rb', line 59
def add_serializers(*new_serializers) new_serializers = new_serializers.flatten new_serializers.map! do |s| if s.is_a?(Class) && s < ObjectSerializer s.instance else s end end @serializers += new_serializers index_serializers @serializers end
.deserialize(argument)
Returns deserialized object. Will look up through all known serializers. If no serializer found will raise ArgumentError
.
# File 'activejob/lib/active_job/serializers.rb', line 40
def deserialize(argument) serializer_name = argument[Arguments::OBJECT_SERIALIZER_KEY] raise ArgumentError, "Serializer name is not present in the argument: #{argument.inspect}" unless serializer_name serializer = serializer_name.safe_constantize raise ArgumentError, "Serializer #{serializer_name} is not known" unless serializer serializer.deserialize(argument) end
.index_serializers (private)
[ GitHub ]# File 'activejob/lib/active_job/serializers.rb', line 75
def index_serializers @serializers_index.clear serializers.each do |s| if s.respond_to?(:klass) @serializers_index[s.klass] = s elsif s.respond_to?(:klass, true) klass = s.send(:klass) ActiveJob.deprecator.warn(<<~MSG.squish) #{s.class.name}#klass method should be public. MSG @serializers_index[klass] = s end end end
.serialize(argument)
Returns serialized representative of the passed object. Will look up through all known serializers. Raises SerializationError
if it can’t find a proper serializer.
# File 'activejob/lib/active_job/serializers.rb', line 31
def serialize(argument) serializer = @serializers_index[argument.class] || serializers.find { |s| s.serialize?(argument) } raise SerializationError.new("Unsupported argument type: #{argument.class.name}") unless serializer serializer.serialize(argument) end