rails/activejob/CHANGELOG.md
Sean Griffin 31085a5cd4 Allow keyword arguments to work with ActiveJob
Unfortunately, the HashWithIndifferent access approach is insufficient
for our needs. It's perfectly reasonable to want to use keyword
arguments with Active Job, which we will see as a symbol keyed hash. For
Ruby to convert this back to keyword arguments, it must deserialize to a
symbol keyed hash.

There are two primary changes to the serialization behavior. We first
treat a HWIA separately, and mark it as such so we can convert it back
into a HWIA during deserialization.

For normal hashes, we keep a list of all symbol keys, and convert them
back to symbol keys after deserialization.

Fixes #18741.
2015-01-30 13:43:39 -07:00

1.3 KiB

  • Allow keyword arguments to be used with Active Job.

    Fixes #18741.

    Sean Griffin

  • Add :only option to assert_enqueued_jobs, to check the number of times a specific kind of job is enqueued.

    Example:

    def test_logging_job
      assert_enqueued_jobs 1, only: LoggingJob do
        LoggingJob.perform_later
        HelloJob.perform_later('jeremy')
      end
    end
    

    George Claghorn

  • ActiveJob::Base.deserialize delegates to the job class.

    Since ActiveJob::Base#deserialize can be overridden by subclasses (like ActiveJob::Base#serialize) this allows jobs to attach arbitrary metadata when they get serialized and read it back when they get performed.

    Example:

    class DeliverWebhookJob < ActiveJob::Base
      def serialize
        super.merge('attempt_number' => (@attempt_number || 0) + 1)
      end
    
      def deserialize(job_data)
        super
        @attempt_number = job_data['attempt_number']
      end
    
      rescue_from(TimeoutError) do |exception|
        raise exception if @attempt_number > 5
        retry_job(wait: 10)
      end
    end
    

    Isaac Seymour

Please check 4-2-stable for previous changes.