* Enable class reloading prior to job dispatch, and ensure Active Record
connections are returned to the pool when jobs are run in separate threads.
*Matthew Draper*
* Tune the async adapter for low-footprint dev/test usage. Use a single
thread pool for all queues and limit to 0 to #CPU total threads, down from
2 to 10*#CPU per queue.
*Jeremy Daer*
## Rails 5.0.0.beta3 (February 24, 2016) ##
* Change the default adapter from inline to async. It's a better default as tests will then not mistakenly
come to rely on behavior happening synchronously. This is especially important with things like jobs kicked off
in Active Record lifecycle callbacks.
*DHH*
## Rails 5.0.0.beta2 (February 01, 2016) ##
* No changes.
## Rails 5.0.0.beta1 (December 18, 2015) ##
* Fixed serializing `:at` option for `assert_enqueued_with`
and `assert_performed_with`.
*Wojciech Wnętrzak*
* Support passing array to `assert_enqueued_jobs` in `:only` option.
*Wojciech Wnętrzak*
* Add job priorities to Active Job.
*wvengen*
* Implement a simple `AsyncJob` processor and associated `AsyncAdapter` that
queue jobs to a `concurrent-ruby` thread pool.
*Jerry D'Antonio*
* Implement `provider_job_id` for `queue_classic` adapter. This requires the
latest, currently unreleased, version of queue_classic.
*Yves Senn*
* `assert_enqueued_with` and `assert_performed_with` now returns the matched
job instance for further assertions.
*Jean Boussier*
* Include `I18n.locale` into job serialization/deserialization and use it around
`perform`.
Fixes #20799.
*Johannes Opper*
* Allow `DelayedJob`, `Sidekiq`, `qu`, and `que` to report the job id back to
`ActiveJob::Base` as `provider_job_id`.
Fixes #18821.
*Kevin Deisz*, *Jeroen van Baarsen*
* `assert_enqueued_jobs` and `assert_performed_jobs` in block form use the
given number as expected value. This makes the error message much easier to
understand.
*y-yagi*
* A generated job now inherits from `app/jobs/application_job.rb` by default.
*Jeroen van Baarsen*
* Add an `:only` option to `perform_enqueued_jobs` to filter jobs based on
type.
This allows specific jobs to be tested, while preventing others from
being performed unnecessarily.
Example:
def test_hello_job
assert_performed_jobs 1, only: HelloJob do
HelloJob.perform_later('jeremy')
LoggingJob.perform_later
end
end
An array may also be specified, to support testing multiple jobs.
Example:
def test_hello_and_logging_jobs
assert_nothing_raised do
assert_performed_jobs 2, only: [HelloJob, LoggingJob] do
HelloJob.perform_later('jeremy')
LoggingJob.perform_later('stewie')
RescueJob.perform_later('david')
end
end
end
Fixes #18802.
*Michael Ryan*
* 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](https://github.com/rails/rails/blob/4-2-stable/activejob/CHANGELOG.md) for previous changes.