31085a5cd4
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.
1.3 KiB
1.3 KiB
-
Allow keyword arguments to be used with Active Job.
Fixes #18741.
Sean Griffin
-
Add
:only
option toassert_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 (likeActiveJob::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.