Sha256: 68187ce1d3ae2a9438d8b6287acde5ff0485601615e9895854c17c7955419800

Contents?: true

Size: 1014 Bytes

Versions: 5

Compression:

Stored size: 1014 Bytes

Contents

# frozen_string_literal: true

require "active_job/serializers/object_serializer"

module AcidicJob
  module Serializers
    class JobSerializer < ::ActiveJob::Serializers::ObjectSerializer
      def serialize(job)
        # don't serialize the `enqueued_at` value, as ActiveRecord will check if the Run record has changed
        # by comparing the deserialized database value with a temporary in-memory generated value.
        # That temporary in-memory generated value can sometimes have an `enqueued_at` value that is 1 second off
        # from the original. In this case, ActiveRecord will think the record has unsaved changes and block the lock.
        super(job.as_json.merge("job_class" => job.class.name))
      end

      def deserialize(hash)
        job = ::ActiveJob::Base.deserialize(hash)
        job.send(:deserialize_arguments_if_needed)
        job
      end

      def serialize?(argument)
        defined?(::ActiveJob::Base) && argument.class < ::ActiveJob::Base
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
acidic_job-0.8.3 lib/acidic_job/serializers/job_serializer.rb
acidic_job-0.8.2 lib/acidic_job/serializers/job_serializer.rb
acidic_job-0.8.1 lib/acidic_job/serializers/job_serializer.rb
acidic_job-0.8.0 lib/acidic_job/serializers/job_serializer.rb
acidic_job-1.0.0.beta.10 lib/acidic_job/serializers/job_serializer.rb