active_scheduler 0.2.0 → 0.7.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: c723aa094616a7530ea528c8910f5abfe695d91b
4
- data.tar.gz: a8286d5ebc009739893d72912fc3534158161dbe
2
+ SHA256:
3
+ metadata.gz: 3073d561f9035ada866836665d88d99bb7a23badd33171706a7f84c7f0b97a58
4
+ data.tar.gz: 5b50684ed4c4882d05ebc42b44f09d6f252333884c01177cc379c335324d684f
5
5
  SHA512:
6
- metadata.gz: 42cc510cc65ff67895469f65ee436024faeaf4b064bf2e18e2264219ba89b55603c6f0f489008838db3e8c6bf107dcbc771d986d0e1599ab4e19b41e751ba4d3
7
- data.tar.gz: 71cba03ce129f5a22a5b948f71a3cc3428d0a09939c0df418c77ce364e43d3251a6f2aae43c3639c1c9a0c38425e6d44ce0e0e7d89c58cbc9d0e46a93b73ba2f
6
+ metadata.gz: 16df38caebab620ed732b88ae40b6296b05afb7d1d78ed62b116a9cfebc55e281908935f886447c1380f405f323e4848d1594815f5ba069b45f7f9187dd520b5
7
+ data.tar.gz: 3c72338f022ef31687ffd9085f32bbaf21c318cad169e1fc17feff73c55ee5445fe23e28cfbad2197da1d18c74e60b291fd5df2d5b48ce9faa95890515a6fc01
data/.gitignore CHANGED
@@ -22,3 +22,4 @@
22
22
  .DS_Store
23
23
  /.rvmrc
24
24
  /.yardoc
25
+ .idea/
@@ -1,15 +1,48 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 1.9.3
4
- - 2.0.0
5
- - 2.1.0
6
- - 2.1.5
7
- - 2.2.0
8
- matrix:
9
- allow_failures:
10
- - rvm: 1.9.3
3
+ - 2.0
4
+ - 2.1
5
+ - 2.2
6
+ - 2.3
7
+ - 2.4
8
+ - 2.5
9
+ - 2.6
10
+ - 2.7
11
11
  env:
12
12
  - "RAILS_VERSION=4.2.0"
13
+ - "RAILS_VERSION=5.0.0"
14
+ - "RAILS_VERSION=5.1.0"
15
+ - "RAILS_VERSION=5.2.0"
16
+ - "RAILS_VERSION=6.0.0"
17
+ matrix:
18
+ exclude:
19
+ - rvm: 2.0
20
+ env: "RAILS_VERSION=5.0.0"
21
+ - rvm: 2.0
22
+ env: "RAILS_VERSION=5.1.0"
23
+ - rvm: 2.0
24
+ env: "RAILS_VERSION=5.2.0"
25
+ - rvm: 2.0
26
+ env: "RAILS_VERSION=6.0.0"
27
+ - rvm: 2.1
28
+ env: "RAILS_VERSION=5.0.0"
29
+ - rvm: 2.1
30
+ env: "RAILS_VERSION=5.1.0"
31
+ - rvm: 2.1
32
+ env: "RAILS_VERSION=5.2.0"
33
+ - rvm: 2.1
34
+ env: "RAILS_VERSION=6.0.0"
35
+ - rvm: 2.2
36
+ env: "RAILS_VERSION=5.1.0"
37
+ - rvm: 2.2
38
+ env: "RAILS_VERSION=6.0.0"
39
+ - rvm: 2.3
40
+ env: "RAILS_VERSION=6.0.0"
41
+ - rvm: 2.4
42
+ env: "RAILS_VERSION=4.2.0"
43
+ - rvm: 2.4
44
+ env: "RAILS_VERSION=6.0.0"
45
+
13
46
  notifications:
14
47
  email:
15
48
  recipients:
@@ -1,9 +1,33 @@
1
+ # 0.7.0
2
+ - Remove deprecated Rubyforge reference [#19](https://github.com/JustinAiken/active_scheduler/pull/19) (Thanks @kensentor)
3
+ - Implement ActiveScheduler::ResqueWrapper.scheduled [#17](https://github.com/JustinAiken/active_scheduler/pull/17) (Thanks @AMHOL)
4
+
5
+ # 0.6.0
6
+
7
+ - Add `persist` option [#15](https://github.com/JustinAiken/active_scheduler/pull/15) (Thanks @SpiffyStores)
8
+ - Remove hardcoded class references [#16](https://github.com/JustinAiken/active_scheduler/pull/16) (Thanks @kensentor)
9
+
10
+ # 0.5.0
11
+ - Expand Travis matrix to include Rails 5 and more ruby versions
12
+ - Allow `rails_env` option since [resque-scheduler](https://github.com/resque/resque-scheduler) does [#10](https://github.com/JustinAiken/active_scheduler/pull/10) (Thanks @blahutka)
13
+
14
+ # 0.4.0
15
+ - Use job's queue instead of hardcoded `default` [#9](https://github.com/JustinAiken/active_scheduler/pull/9) (Thanks @r3trofitted)
16
+
17
+ # 0.3.0
18
+
19
+ - Remove explicit active_support dependency (it's pulled in by activejob)
20
+ - Updated testing matrix for more rubies 💎💎💎
21
+ - Support named args [#6](https://github.com/JustinAiken/active_scheduler/pull/6) (Thanks @jdguzman)
22
+
1
23
  # 0.2.0
2
24
 
3
- - Deprecate `arguments` in favor of `args` [#5](https://github.com/JustinAiken/active_scheduler/pull/5)
25
+ - Deprecate `arguments` in favor of `args` [#5](https://github.com/JustinAiken/active_scheduler/pull/5) (Thanks @ximus)
4
26
 
5
27
  # 0.1.0
6
28
 
7
- - Only wrap jobs that are descendants of `ActiveJob::Base` [#3](https://github.com/JustinAiken/active_scheduler/pull/3)
29
+ - Only wrap jobs that are descendants of `ActiveJob::Base` [#3](https://github.com/JustinAiken/active_scheduler/pull/3) (Thanks @ximus)
8
30
 
9
31
  # 0.0.3
32
+
33
+ - Use schedule name as class name if unspecified [#1](https://github.com/JustinAiken/active_scheduler/pull/1) (Thanks @jeremycrosbie)
data/Gemfile CHANGED
@@ -4,6 +4,10 @@ rails_version = ENV['RAILS_VERSION'] || '4.2.0'
4
4
  rails = "~> #{rails_version}"
5
5
 
6
6
  gem "activejob", rails
7
- gem "activesupport", rails
7
+
8
+ gem "guard-rspec", '~> 4.2' unless ENV['CI']
9
+
10
+ # Randomly grabbed 'tins' version doesn't like ancient rubies
11
+ gem "tins", '~> 1.6.0' if RUBY_VERSION == '1.9.3'
8
12
 
9
13
  gemspec
@@ -8,9 +8,10 @@ Currently only Resque is supported, but pull requests to add other queues (sidek
8
8
 
9
9
  ## Requirements/Support
10
10
 
11
- - Rails
12
- - ActiveJob 4.2+
13
- - ActiveSupport 4.2+
11
+ - Ruby 2.0+
12
+ - ActiveJob
13
+ - 4.2 is tested and used in production
14
+ - 5.0-6.0 is tested against CI, but I haven't tried it in production.
14
15
  - Resque
15
16
  - Resque Scheduler
16
17
 
@@ -57,11 +58,36 @@ ThisIsTheClass:
57
58
 
58
59
  Only classes that are descended from `ActiveJob::Base` will be wrapped
59
60
 
61
+ ### Job Classes With Named Args
62
+
63
+ If you have a job class that uses named arguments you can specify that. `args`
64
+ should be a hash nested in the array and you need to add the named_args key.
65
+
66
+ ```yaml
67
+ simple_job:
68
+ every: "30s"
69
+ queue: "simple"
70
+ class: "SimpleJob"
71
+ args:
72
+ - foo: 1
73
+ bar: 2
74
+ description: "It's a simple job."
75
+ named_args: true
76
+ ```
77
+
60
78
  ## Credits
61
79
 
62
80
  - Written by [@JustinAiken](https://www.github.com/JustinAiken)
63
81
  - Wrapper class idea by [@ryanwjackson](https://www.github.com/ryanwjackson)
64
- - Special thanks to [Rocketmade](http://www.rocketmade.com/) for development resources.
82
+ - Special thanks to [Rocketmade](https://www.rocketmade.com/) for development resources.
83
+ - Other Contributors:
84
+ - [@jeremycrosbie](https://github.com/jeremycrosbie)
85
+ - [@ximus](https://github.com/ximus)
86
+ - [@jdguzman](https://github.com/jdguzman)
87
+ - [@r3trofitted](https://github.com/r3trofitted)
88
+ - [@blahutka](https://github.com/blahutka)
89
+ - [@SpiffyStores](https://github.com/SpiffyStores)
90
+ - [@kensentor](https://github.com/kensentor)
65
91
 
66
92
  ## License
67
93
 
@@ -6,22 +6,18 @@ Gem::Specification.new do |s|
6
6
  s.name = "active_scheduler"
7
7
  s.version = ActiveScheduler::VERSION
8
8
  s.authors = ["Justin Aiken"]
9
- s.email = ["jaiken@rocketmade.com"]
9
+ s.email = ["60tonangel@gmail.com"]
10
10
  s.license = 'MIT'
11
11
  s.homepage = "https://github.com/JustinAiken/active_scheduler"
12
12
  s.summary = %q{Scheduling for ActiveJob}
13
13
  s.description = %q{A wrapper for scheduling jobs through ActiveJob}
14
14
 
15
- s.rubyforge_project = "active_scheduler"
16
-
17
15
  s.files = `git ls-files`.split("\n")
18
16
  s.test_files = `git ls-files -- {spec}/*`.split("\n")
19
17
  s.require_paths = ["lib"]
20
18
 
21
- s.add_dependency 'activejob', '>= 4.2.0'
22
- s.add_dependency 'activesupport', '>= 4.2.0'
23
-
24
- s.add_development_dependency 'rspec-rails', '~> 3.1'
25
- s.add_development_dependency 'guard-rspec', '~> 4.2'
19
+ s.add_dependency 'rake'
20
+ s.add_dependency 'activejob', '>= 4.2.0'
21
+ s.add_development_dependency 'rspec', '~> 3.5'
26
22
  s.add_development_dependency 'coveralls'
27
23
  end
@@ -1,4 +1,3 @@
1
- require 'active_support'
2
1
  require 'active_job'
3
2
  require 'active_scheduler/version'
4
3
  require 'active_scheduler/resque_wrapper'
@@ -3,24 +3,38 @@ module ActiveScheduler
3
3
 
4
4
  def self.perform(job_data)
5
5
  klass = Object.const_get job_data['job_class']
6
+ named_args = job_data.delete('named_args') || false
6
7
 
7
8
  if job_data.has_key? 'arguments'
8
- klass.perform_later *job_data['arguments']
9
+ if named_args
10
+ args = job_data['arguments'].first.symbolize_keys
11
+ else
12
+ args = job_data['arguments']
13
+ end
14
+
15
+ named_args ? klass.perform_later(**args) : klass.perform_later(*args)
9
16
  else
10
17
  klass.perform_later
11
18
  end
12
19
  end
13
20
 
21
+ def self.scheduled(_queue, _wrapper_klass, *args)
22
+ perform(*args)
23
+ end
24
+
14
25
  def self.wrap(schedule)
15
26
  schedule = HashWithIndifferentAccess.new(schedule)
16
27
 
17
28
  schedule.each do |job, opts|
18
29
  class_name = opts[:class] || job
19
- next if class_name =~ /ActiveScheduler::ResqueWrapper/
20
- next unless class_name.constantize <= ActiveJob::Base
30
+ next if class_name =~ /#{self.to_s}/
31
+
32
+ klass = class_name.constantize
33
+ next unless klass <= ActiveJob::Base
21
34
 
22
- queue = opts[:queue] || 'default'
35
+ queue = opts[:queue] || klass.queue_name
23
36
  args = opts[:args]
37
+ named_args = opts[:named_args] || false
24
38
 
25
39
  if !args && opts.has_key?(:arguments)
26
40
  warn 'active_scheduler: [DEPRECATION] using the `arguments` key in ' \
@@ -30,18 +44,22 @@ module ActiveScheduler
30
44
  end
31
45
 
32
46
  schedule[job] = {
33
- class: 'ActiveScheduler::ResqueWrapper',
47
+ class: self.to_s,
34
48
  queue: queue,
35
49
  args: [{
36
- job_class: class_name,
37
- queue_name: queue,
38
- arguments: args
39
- }]
50
+ job_class: class_name,
51
+ queue_name: queue,
52
+ arguments: args,
53
+ }]
40
54
  }
41
55
 
56
+ schedule[job][:args].first.merge!({ named_args: named_args }) if named_args
57
+
42
58
  schedule[job][:description] = opts.fetch(:description, nil) if opts.fetch(:description, nil)
43
59
  schedule[job][:every] = opts.fetch(:every, nil) if opts.fetch(:every, nil)
44
60
  schedule[job][:cron] = opts.fetch(:cron, nil) if opts.fetch(:cron, nil)
61
+ schedule[job][:rails_env] = opts.fetch(:rails_env, nil) if opts.fetch(:rails_env, nil)
62
+ schedule[job][:persist] = true if opts.fetch(:persist, nil)
45
63
  end
46
64
  end
47
65
  end
@@ -1,3 +1,3 @@
1
1
  module ActiveScheduler
2
- VERSION = "0.2.0"
2
+ VERSION = "0.7.0"
3
3
  end
@@ -15,6 +15,7 @@ describe ActiveScheduler::ResqueWrapper do
15
15
  "queue" => "simple",
16
16
  "description" => "It's a simple job.",
17
17
  "every" => "30s",
18
+ "rails_env" => "test",
18
19
  "args" => [{
19
20
  "job_class" => "SimpleJob",
20
21
  "queue_name" => "simple",
@@ -31,10 +32,34 @@ describe ActiveScheduler::ResqueWrapper do
31
32
  "queue" => "simple",
32
33
  "description" => "It's a simple job.",
33
34
  "every" => "30s",
35
+ "rails_env" => "test",
34
36
  "args" => ['foo-arg-1', 'foo-arg-2'],
35
37
  )
36
38
  end
37
39
  end
40
+
41
+ context 'with a custom wrapper class' do
42
+ class CustomWrapper < ActiveScheduler::ResqueWrapper
43
+ end
44
+
45
+ let(:schedule) { YAML.load_file 'spec/fixtures/simple_job.yaml' }
46
+
47
+ it "queues up a simple job" do
48
+ stub_jobs("SimpleJob")
49
+ expect(CustomWrapper.wrap(schedule)['simple_job']).to eq(
50
+ "class" => "CustomWrapper",
51
+ "queue" => "simple",
52
+ "description" => "It's a simple job.",
53
+ "every" => "30s",
54
+ "rails_env" => "test",
55
+ "args" => [{
56
+ "job_class" => "SimpleJob",
57
+ "queue_name" => "simple",
58
+ "arguments" => ['foo-arg-1', 'foo-arg-2'],
59
+ }]
60
+ )
61
+ end
62
+ end
38
63
  end
39
64
 
40
65
  context "with a simple job json" do
@@ -56,6 +81,27 @@ describe ActiveScheduler::ResqueWrapper do
56
81
  end
57
82
  end
58
83
 
84
+ context "with a persist key" do
85
+ let(:schedule) { YAML.load_file 'spec/fixtures/persist_job.yaml' }
86
+
87
+ it "queues up a simple job" do
88
+ stub_jobs("SimpleJob")
89
+ expect(wrapped['persist_job']).to eq(
90
+ "class" => "ActiveScheduler::ResqueWrapper",
91
+ "queue" => "simple",
92
+ "description" => "It's a simple job. That persists.",
93
+ "every" => "30s",
94
+ "rails_env" => "test",
95
+ "persist" => true,
96
+ "args" => [{
97
+ "job_class" => "SimpleJob",
98
+ "queue_name" => "simple",
99
+ "arguments" => ['foo-arg-1', 'foo-arg-2'],
100
+ }]
101
+ )
102
+ end
103
+ end
104
+
59
105
  context "with a multiple jobs in the schedule" do
60
106
  let(:schedule) { YAML.load_file 'spec/fixtures/two_jobs.yaml' }
61
107
 
@@ -79,9 +125,14 @@ describe ActiveScheduler::ResqueWrapper do
79
125
  context "when the queue is blank" do
80
126
  let(:schedule) { YAML.load_file 'spec/fixtures/no_queue.yaml' }
81
127
 
82
- it "uses 'default'" do
83
- stub_jobs("SimpleJob")
84
- expect(wrapped['no_queue_job']['queue']).to eq 'default'
128
+ it "uses the job's queue" do
129
+ simple_job = Class.new(ActiveJob::Base) do
130
+ queue_as :myscheduledjobqueue
131
+ end
132
+
133
+ stub_const("SimpleJob", simple_job)
134
+
135
+ expect(wrapped['no_queue_job']['queue']).to eq 'myscheduledjobqueue'
85
136
  end
86
137
  end
87
138
 
@@ -103,6 +154,26 @@ describe ActiveScheduler::ResqueWrapper do
103
154
  )
104
155
  end
105
156
  end
157
+
158
+ context "when the schedule is for a job with named arguments" do
159
+ let(:schedule) { YAML.load_file 'spec/fixtures/named_args_job.yaml' }
160
+
161
+ it "queues up a job, specifing that there are named args in the job" do
162
+ stub_jobs("NamedArgsJob")
163
+ expect(wrapped['named_args_job']).to eq(
164
+ "class" => "ActiveScheduler::ResqueWrapper",
165
+ "queue" => "simple",
166
+ "description" => "It's a named args job.",
167
+ "every" => "30s",
168
+ "args" => [{
169
+ "job_class" => "NamedArgsJob",
170
+ "queue_name" => "simple",
171
+ "arguments" => [{'foo' => 1, 'bar' => 2}],
172
+ "named_args" => true
173
+ }]
174
+ )
175
+ end
176
+ end
106
177
  end
107
178
 
108
179
  describe ".perform" do
@@ -124,5 +195,36 @@ describe ActiveScheduler::ResqueWrapper do
124
195
  expect(TestKlass).to receive(:perform_later).with 1, 2
125
196
  end
126
197
  end
198
+
199
+ context "with named_arguments specified" do
200
+ let(:job_data) do
201
+ {
202
+ 'job_class' => 'TestKlass',
203
+ 'arguments' => [{ 'foo' => 1, 'bar' => 2 }],
204
+ 'named_args' => true
205
+ }
206
+ end
207
+
208
+ it "passed the arguments as Named args" do
209
+ expect(TestKlass).to receive(:perform_later).with(foo: 1, bar: 2)
210
+ end
211
+ end
212
+ end
213
+
214
+ describe '.scheduled' do
215
+ let(:queue_name) { 'test_queue' }
216
+ let(:job_data) { {'job_class' => 'TestKlass'} }
217
+
218
+ before do
219
+ allow(described_class).to receive(:perform)
220
+ end
221
+
222
+ after do
223
+ described_class.scheduled(queue_name, described_class, job_data)
224
+ end
225
+
226
+ it 'delegates to .perform with job_data' do
227
+ expect(described_class).to receive(:perform).with(job_data)
228
+ end
127
229
  end
128
230
  end
@@ -0,0 +1,9 @@
1
+ named_args_job:
2
+ every: "30s"
3
+ queue: "simple"
4
+ class: "NamedArgsJob"
5
+ args:
6
+ - foo: 1
7
+ bar: 2
8
+ description: "It's a named args job."
9
+ named_args: true
@@ -0,0 +1,10 @@
1
+ persist_job:
2
+ every: "30s"
3
+ queue: "simple"
4
+ class: "SimpleJob"
5
+ rails_env: "test"
6
+ args:
7
+ - foo-arg-1
8
+ - foo-arg-2
9
+ description: "It's a simple job. That persists."
10
+ persist: true
@@ -2,6 +2,7 @@ simple_job:
2
2
  every: "30s"
3
3
  queue: "simple"
4
4
  class: "SimpleJob"
5
+ rails_env: "test"
5
6
  args:
6
7
  - foo-arg-1
7
8
  - foo-arg-2
metadata CHANGED
@@ -1,31 +1,31 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_scheduler
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Justin Aiken
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-04-08 00:00:00.000000000 Z
11
+ date: 2020-08-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: activejob
14
+ name: rake
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 4.2.0
19
+ version: '0'
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: '0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: activesupport
28
+ name: activejob
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
@@ -39,33 +39,19 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: 4.2.0
41
41
  - !ruby/object:Gem::Dependency
42
- name: rspec-rails
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - "~>"
46
- - !ruby/object:Gem::Version
47
- version: '3.1'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: '3.1'
55
- - !ruby/object:Gem::Dependency
56
- name: guard-rspec
42
+ name: rspec
57
43
  requirement: !ruby/object:Gem::Requirement
58
44
  requirements:
59
45
  - - "~>"
60
46
  - !ruby/object:Gem::Version
61
- version: '4.2'
47
+ version: '3.5'
62
48
  type: :development
63
49
  prerelease: false
64
50
  version_requirements: !ruby/object:Gem::Requirement
65
51
  requirements:
66
52
  - - "~>"
67
53
  - !ruby/object:Gem::Version
68
- version: '4.2'
54
+ version: '3.5'
69
55
  - !ruby/object:Gem::Dependency
70
56
  name: coveralls
71
57
  requirement: !ruby/object:Gem::Requirement
@@ -82,7 +68,7 @@ dependencies:
82
68
  version: '0'
83
69
  description: A wrapper for scheduling jobs through ActiveJob
84
70
  email:
85
- - jaiken@rocketmade.com
71
+ - 60tonangel@gmail.com
86
72
  executables: []
87
73
  extensions: []
88
74
  extra_rdoc_files: []
@@ -102,7 +88,9 @@ files:
102
88
  - lib/active_scheduler/version.rb
103
89
  - spec/active_scheduler/resque_wrapper_spec.rb
104
90
  - spec/fixtures/cron_job.yaml
91
+ - spec/fixtures/named_args_job.yaml
105
92
  - spec/fixtures/no_queue.yaml
93
+ - spec/fixtures/persist_job.yaml
106
94
  - spec/fixtures/schedule_name_is_class_name.yaml
107
95
  - spec/fixtures/simple_job.json
108
96
  - spec/fixtures/simple_job.yaml
@@ -112,7 +100,7 @@ homepage: https://github.com/JustinAiken/active_scheduler
112
100
  licenses:
113
101
  - MIT
114
102
  metadata: {}
115
- post_install_message:
103
+ post_install_message:
116
104
  rdoc_options: []
117
105
  require_paths:
118
106
  - lib
@@ -127,10 +115,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
127
115
  - !ruby/object:Gem::Version
128
116
  version: '0'
129
117
  requirements: []
130
- rubyforge_project: active_scheduler
131
- rubygems_version: 2.4.8
132
- signing_key:
118
+ rubygems_version: 3.0.6
119
+ signing_key:
133
120
  specification_version: 4
134
121
  summary: Scheduling for ActiveJob
135
122
  test_files: []
136
- has_rdoc: