mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
fbebeabd6d
This commit allows ActiveJob to serialize classes and modules without a custom serializer. This allows for workflows like: ``` class EmailJob < ApplicationJob queue_as :default def perform(template_class, *arguments) template_class.new(*arguments).send! end end module Email class FooTemplate ... end class BarTemplate ... end end EmailJob.perform_later(Email::FooTemplate, ...) EmailJob.perform_later(Email::BarTemplate, ...) ``` Currently this is only achieveable through a custom serializer or through constantizing in each instance.
20 lines
358 B
Ruby
20 lines
358 B
Ruby
# frozen_string_literal: true
|
|
|
|
module ActiveJob
|
|
module Serializers
|
|
class ModuleSerializer < ObjectSerializer # :nodoc:
|
|
def serialize(constant)
|
|
super("value" => constant.name)
|
|
end
|
|
|
|
def deserialize(hash)
|
|
hash["value"].constantize
|
|
end
|
|
|
|
private
|
|
def klass
|
|
Module
|
|
end
|
|
end
|
|
end
|
|
end
|