mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
30528cda9e
Add `:nodoc:` to `ActiveJob::Serializers` Add `:doc:` to `ActiveJob::Serializers::ObjectSerializer#klass` Express `ActiveJob::Serializers::ObjectSerializer#klass` as private method
54 lines
1.3 KiB
Ruby
54 lines
1.3 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module ActiveJob
|
|
module Serializers
|
|
# Base class for serializing and deserializing custom objects.
|
|
#
|
|
# Example:
|
|
#
|
|
# class MoneySerializer < ActiveJob::Serializers::ObjectSerializer
|
|
# def serialize(money)
|
|
# super("amount" => money.amount, "currency" => money.currency)
|
|
# end
|
|
#
|
|
# def deserialize(hash)
|
|
# Money.new(hash["amount"], hash["currency"])
|
|
# end
|
|
#
|
|
# private
|
|
#
|
|
# def klass
|
|
# Money
|
|
# end
|
|
# end
|
|
class ObjectSerializer
|
|
include Singleton
|
|
|
|
class << self
|
|
delegate :serialize?, :serialize, :deserialize, to: :instance
|
|
end
|
|
|
|
# Determines if an argument should be serialized by a serializer.
|
|
def serialize?(argument)
|
|
argument.is_a?(klass)
|
|
end
|
|
|
|
# Serializes an argument to a JSON primitive type.
|
|
def serialize(hash)
|
|
{ Arguments::OBJECT_SERIALIZER_KEY => self.class.name }.merge!(hash)
|
|
end
|
|
|
|
# Deserilizes an argument form a JSON primiteve type.
|
|
def deserialize(_argument)
|
|
raise NotImplementedError
|
|
end
|
|
|
|
private
|
|
|
|
# The class of the object that will be serialized.
|
|
def klass # :doc:
|
|
raise NotImplementedError
|
|
end
|
|
end
|
|
end
|
|
end
|