activejob 4.2.0.beta4 → 4.2.0.rc1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +4 -5
- data/lib/active_job/base.rb +1 -1
- data/lib/active_job/callbacks.rb +2 -0
- data/lib/active_job/core.rb +4 -5
- data/lib/active_job/enqueuing.rb +3 -1
- data/lib/active_job/execution.rb +1 -0
- data/lib/active_job/gem_version.rb +1 -1
- data/lib/active_job/logging.rb +1 -1
- data/lib/active_job/queue_adapter.rb +3 -0
- data/lib/active_job/queue_adapters.rb +2 -1
- data/lib/active_job/queue_adapters/delayed_job_adapter.rb +2 -2
- data/lib/active_job/queue_name.rb +1 -0
- data/lib/active_job/test_helper.rb +31 -9
- metadata +9 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e0a61dc5a6408052bac810485af089a5c1477c39
|
4
|
+
data.tar.gz: af2e846dd9d0dfb548af8d181f30d8bb023c597f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 879f7096af7b18d69247b03177c43c580add3cca004f8bbaf478d44d50f30bea247a0a188f36100a072874d321312f50c2684e31ea781f0dedb265c2713fc415
|
7
|
+
data.tar.gz: 3f46dffac8950c8ddb2b120c1cc52ab14174d3b1782227de98edf91c75cc522471774a57f3bebee1fa1406aa624fdeb9406e42dc21dfb6195da0252f8c255198
|
data/README.md
CHANGED
@@ -5,7 +5,7 @@ of queueing backends. These jobs can be everything from regularly scheduled
|
|
5
5
|
clean-ups, to billing charges, to mailings. Anything that can be chopped up into
|
6
6
|
small units of work and run in parallel, really.
|
7
7
|
|
8
|
-
It also serves as the backend for
|
8
|
+
It also serves as the backend for Action Mailer's #deliver_later functionality
|
9
9
|
that makes it easy to turn any mailing into a job for running later. That's
|
10
10
|
one of the most common jobs in a modern web application: Sending emails outside
|
11
11
|
of the request-response cycle, so the user doesn't have to wait on it.
|
@@ -26,7 +26,8 @@ Set the queue adapter for Active Job:
|
|
26
26
|
ActiveJob::Base.queue_adapter = :inline # default queue adapter
|
27
27
|
```
|
28
28
|
Note: To learn how to use your preferred queueing backend see its adapter
|
29
|
-
documentation at
|
29
|
+
documentation at
|
30
|
+
[ActiveJob::QueueAdapters](http://api.rubyonrails.org/classes/ActiveJob/QueueAdapters.html).
|
30
31
|
|
31
32
|
Declare a job like so:
|
32
33
|
|
@@ -110,7 +111,7 @@ Source code can be downloaded as part of the Rails project on GitHub
|
|
110
111
|
|
111
112
|
## License
|
112
113
|
|
113
|
-
|
114
|
+
Active Job is released under the MIT license:
|
114
115
|
|
115
116
|
* http://www.opensource.org/licenses/MIT
|
116
117
|
|
@@ -128,5 +129,3 @@ Bug reports can be filed for the Ruby on Rails project here:
|
|
128
129
|
Feature requests should be discussed on the rails-core mailing list here:
|
129
130
|
|
130
131
|
* https://groups.google.com/forum/?fromgroups#!forum/rubyonrails-core
|
131
|
-
|
132
|
-
|
data/lib/active_job/base.rb
CHANGED
@@ -32,7 +32,7 @@ module ActiveJob #:nodoc:
|
|
32
32
|
# end
|
33
33
|
#
|
34
34
|
# Records that are passed in are serialized/deserialized using Global
|
35
|
-
#
|
35
|
+
# ID. More information can be found in Arguments.
|
36
36
|
#
|
37
37
|
# To enqueue a job to be performed as soon the queueing system is free:
|
38
38
|
#
|
data/lib/active_job/callbacks.rb
CHANGED
@@ -22,6 +22,8 @@ module ActiveJob
|
|
22
22
|
define_callbacks :enqueue
|
23
23
|
end
|
24
24
|
|
25
|
+
# These methods will be included into any Active Job object, adding
|
26
|
+
# callbacks for +perform+ and +enqueue+ methods.
|
25
27
|
module ClassMethods
|
26
28
|
# Defines a callback that will get called right before the
|
27
29
|
# job's perform method is executed.
|
data/lib/active_job/core.rb
CHANGED
@@ -17,6 +17,8 @@ module ActiveJob
|
|
17
17
|
attr_writer :queue_name
|
18
18
|
end
|
19
19
|
|
20
|
+
# These methods will be included into any Active Job object, adding
|
21
|
+
# helpers for de/serialization and creation of job instances.
|
20
22
|
module ClassMethods
|
21
23
|
# Creates a new job instance from a hash created with +serialize+
|
22
24
|
def deserialize(job_data)
|
@@ -48,8 +50,8 @@ module ActiveJob
|
|
48
50
|
end
|
49
51
|
end
|
50
52
|
|
51
|
-
# Creates a new job instance. Takes
|
52
|
-
#
|
53
|
+
# Creates a new job instance. Takes the arguments that will be
|
54
|
+
# passed to the perform method.
|
53
55
|
def initialize(*arguments)
|
54
56
|
@arguments = arguments
|
55
57
|
@job_id = SecureRandom.uuid
|
@@ -84,6 +86,3 @@ module ActiveJob
|
|
84
86
|
end
|
85
87
|
end
|
86
88
|
end
|
87
|
-
|
88
|
-
|
89
|
-
|
data/lib/active_job/enqueuing.rb
CHANGED
@@ -4,6 +4,7 @@ module ActiveJob
|
|
4
4
|
module Enqueuing
|
5
5
|
extend ActiveSupport::Concern
|
6
6
|
|
7
|
+
# Includes the +perform_later+ method for job initialization.
|
7
8
|
module ClassMethods
|
8
9
|
# Push a job onto the queue. The arguments must be legal JSON types
|
9
10
|
# (string, int, float, nil, true, false, hash or array) or
|
@@ -22,7 +23,7 @@ module ActiveJob
|
|
22
23
|
end
|
23
24
|
end
|
24
25
|
|
25
|
-
#
|
26
|
+
# Reschedules the job to be re-executed. This is useful in combination
|
26
27
|
# with the +rescue_from+ option. When you rescue an exception from your job
|
27
28
|
# you can ask Active Job to retry performing your job.
|
28
29
|
#
|
@@ -37,6 +38,7 @@ module ActiveJob
|
|
37
38
|
# rescue_from(ErrorLoadingSite) do
|
38
39
|
# retry_job queue: :low_priority
|
39
40
|
# end
|
41
|
+
#
|
40
42
|
# def perform(*args)
|
41
43
|
# # raise ErrorLoadingSite if cannot scrape
|
42
44
|
# end
|
data/lib/active_job/execution.rb
CHANGED
data/lib/active_job/logging.rb
CHANGED
@@ -75,7 +75,7 @@ module ActiveJob
|
|
75
75
|
def perform(event)
|
76
76
|
info do
|
77
77
|
job = event.payload[:job]
|
78
|
-
"Performed #{job.class.name} from #{queue_name(event)} in #{event.duration.round(2)
|
78
|
+
"Performed #{job.class.name} from #{queue_name(event)} in #{event.duration.round(2)}ms"
|
79
79
|
end
|
80
80
|
end
|
81
81
|
|
@@ -2,9 +2,12 @@ require 'active_job/queue_adapters/inline_adapter'
|
|
2
2
|
require 'active_support/core_ext/string/inflections'
|
3
3
|
|
4
4
|
module ActiveJob
|
5
|
+
# The <tt>ActionJob::QueueAdapter</tt> module is used to load the
|
6
|
+
# correct adapter. The default queue adapter is the :inline queue.
|
5
7
|
module QueueAdapter #:nodoc:
|
6
8
|
extend ActiveSupport::Concern
|
7
9
|
|
10
|
+
# Includes the setter method for changing the active queue adapter.
|
8
11
|
module ClassMethods
|
9
12
|
mattr_reader(:queue_adapter) { ActiveJob::QueueAdapters::InlineAdapter }
|
10
13
|
|
@@ -13,12 +13,13 @@ module ActiveJob
|
|
13
13
|
# * {Sneakers}[https://github.com/jondot/sneakers]
|
14
14
|
# * {Sucker Punch}[https://github.com/brandonhilkert/sucker_punch]
|
15
15
|
#
|
16
|
-
#
|
16
|
+
# === Backends Features
|
17
17
|
#
|
18
18
|
# | | Async | Queues | Delayed | Priorities | Timeout | Retries |
|
19
19
|
# |-------------------|-------|--------|-----------|------------|---------|---------|
|
20
20
|
# | Backburner | Yes | Yes | Yes | Yes | Job | Global |
|
21
21
|
# | Delayed Job | Yes | Yes | Yes | Job | Global | Global |
|
22
|
+
# | Qu | Yes | Yes | No | No | No | Global |
|
22
23
|
# | Que | Yes | Yes | Yes | Job | No | Job |
|
23
24
|
# | queue_classic | Yes | Yes | No* | No | No | No |
|
24
25
|
# | Resque | Yes | Yes | Yes (Gem) | Queue | Global | Yes |
|
@@ -6,10 +6,10 @@ module ActiveJob
|
|
6
6
|
#
|
7
7
|
# Delayed::Job (or DJ) encapsulates the common pattern of asynchronously
|
8
8
|
# executing longer tasks in the background. Although DJ can have many
|
9
|
-
# storage backends one of the most used is based on Active Record.
|
9
|
+
# storage backends, one of the most used is based on Active Record.
|
10
10
|
# Read more about Delayed Job {here}[https://github.com/collectiveidea/delayed_job].
|
11
11
|
#
|
12
|
-
# To use Delayed Job set the queue_adapter config to +:delayed_job+.
|
12
|
+
# To use Delayed Job, set the queue_adapter config to +:delayed_job+.
|
13
13
|
#
|
14
14
|
# Rails.application.config.active_job.queue_adapter = :delayed_job
|
15
15
|
class DelayedJobAdapter
|
@@ -53,7 +53,7 @@ module ActiveJob
|
|
53
53
|
end
|
54
54
|
end
|
55
55
|
|
56
|
-
#
|
56
|
+
# Asserts that no jobs have been enqueued.
|
57
57
|
#
|
58
58
|
# def test_jobs
|
59
59
|
# assert_no_enqueued_jobs
|
@@ -77,13 +77,21 @@ module ActiveJob
|
|
77
77
|
end
|
78
78
|
|
79
79
|
# Asserts that the number of performed jobs matches the given number.
|
80
|
+
# If no block is passed, <tt>perform_enqueued_jobs</tt>
|
81
|
+
# must be called around the job call.
|
80
82
|
#
|
81
83
|
# def test_jobs
|
82
84
|
# assert_performed_jobs 0
|
83
|
-
#
|
85
|
+
#
|
86
|
+
# perform_enqueued_jobs do
|
87
|
+
# HelloJob.perform_later('xavier')
|
88
|
+
# end
|
84
89
|
# assert_performed_jobs 1
|
85
|
-
#
|
86
|
-
#
|
90
|
+
#
|
91
|
+
# perform_enqueued_jobs do
|
92
|
+
# HelloJob.perform_later('yves')
|
93
|
+
# assert_performed_jobs 2
|
94
|
+
# end
|
87
95
|
# end
|
88
96
|
#
|
89
97
|
# If a block is passed, that block should cause the specified number of
|
@@ -102,7 +110,7 @@ module ActiveJob
|
|
102
110
|
def assert_performed_jobs(number)
|
103
111
|
if block_given?
|
104
112
|
original_count = performed_jobs.size
|
105
|
-
yield
|
113
|
+
perform_enqueued_jobs { yield }
|
106
114
|
new_count = performed_jobs.size
|
107
115
|
assert_equal original_count + number, new_count,
|
108
116
|
"#{number} jobs expected, but #{new_count - original_count} were performed"
|
@@ -116,8 +124,11 @@ module ActiveJob
|
|
116
124
|
#
|
117
125
|
# def test_jobs
|
118
126
|
# assert_no_performed_jobs
|
119
|
-
#
|
120
|
-
#
|
127
|
+
#
|
128
|
+
# perform_enqueued_jobs do
|
129
|
+
# HelloJob.perform_later('matthew')
|
130
|
+
# assert_performed_jobs 1
|
131
|
+
# end
|
121
132
|
# end
|
122
133
|
#
|
123
134
|
# If a block is passed, that block should not cause any job to be performed.
|
@@ -137,7 +148,7 @@ module ActiveJob
|
|
137
148
|
|
138
149
|
# Asserts that the job passed in the block has been enqueued with the given arguments.
|
139
150
|
#
|
140
|
-
# def
|
151
|
+
# def test_assert_enqueued_with
|
141
152
|
# assert_enqueued_with(job: MyJob, args: [1,2,3], queue: 'low') do
|
142
153
|
# MyJob.perform_later(1,2,3)
|
143
154
|
# end
|
@@ -166,7 +177,7 @@ module ActiveJob
|
|
166
177
|
original_performed_jobs = performed_jobs.dup
|
167
178
|
clear_performed_jobs
|
168
179
|
args.assert_valid_keys(:job, :args, :at, :queue)
|
169
|
-
yield
|
180
|
+
perform_enqueued_jobs { yield }
|
170
181
|
matching_job = performed_jobs.any? do |job|
|
171
182
|
args.all? { |key, value| value == job[key] }
|
172
183
|
end
|
@@ -175,6 +186,17 @@ module ActiveJob
|
|
175
186
|
queue_adapter.performed_jobs = original_performed_jobs + performed_jobs
|
176
187
|
end
|
177
188
|
|
189
|
+
def perform_enqueued_jobs
|
190
|
+
@old_perform_enqueued_jobs = queue_adapter.perform_enqueued_jobs
|
191
|
+
@old_perform_enqueued_at_jobs = queue_adapter.perform_enqueued_at_jobs
|
192
|
+
queue_adapter.perform_enqueued_jobs = true
|
193
|
+
queue_adapter.perform_enqueued_at_jobs = true
|
194
|
+
yield
|
195
|
+
ensure
|
196
|
+
queue_adapter.perform_enqueued_jobs = @old_perform_enqueued_jobs
|
197
|
+
queue_adapter.perform_enqueued_at_jobs = @old_perform_enqueued_at_jobs
|
198
|
+
end
|
199
|
+
|
178
200
|
def queue_adapter
|
179
201
|
ActiveJob::Base.queue_adapter
|
180
202
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activejob
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.2.0.
|
4
|
+
version: 4.2.0.rc1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Heinemeier Hansson
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-11-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -16,26 +16,26 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - '='
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 4.2.0.
|
19
|
+
version: 4.2.0.rc1
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - '='
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 4.2.0.
|
26
|
+
version: 4.2.0.rc1
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: globalid
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: 0.3.0
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: 0.3.0
|
41
41
|
description: Declare job classes that can be run by a variety of queueing backends.
|
@@ -87,17 +87,17 @@ require_paths:
|
|
87
87
|
- lib
|
88
88
|
required_ruby_version: !ruby/object:Gem::Requirement
|
89
89
|
requirements:
|
90
|
-
- -
|
90
|
+
- - ">="
|
91
91
|
- !ruby/object:Gem::Version
|
92
92
|
version: 1.9.3
|
93
93
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
94
94
|
requirements:
|
95
|
-
- -
|
95
|
+
- - ">"
|
96
96
|
- !ruby/object:Gem::Version
|
97
97
|
version: 1.3.1
|
98
98
|
requirements: []
|
99
99
|
rubyforge_project:
|
100
|
-
rubygems_version: 2.2.
|
100
|
+
rubygems_version: 2.2.2
|
101
101
|
signing_key:
|
102
102
|
specification_version: 4
|
103
103
|
summary: Job framework with pluggable queues.
|