delayed_cron_job 0.7.0 → 0.7.1
Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ef66952c36796b2dfa66c343a31631d061d09bd1
|
4
|
+
data.tar.gz: fba9ad110c34d1e475bc8057d818b9d0c0fa02d4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: da230b6a7fef72f96129ff81f32f8e1345b025a6f0b54cc6bcc482d44a11e823480a2f3a0715c46687a98226d8f9c7e210ccf3f6892b08723ce6f78fd884e498
|
7
|
+
data.tar.gz: 150cd81fe161e5cd030a99924345902e47788877c861db22975ad6db80aa9eeb593e09abbd11a67c35054eb13603eddcb8313b85f4698368e78e879e0e1229ec
|
data/lib/delayed_cron_job.rb
CHANGED
@@ -3,6 +3,7 @@ require 'English'
|
|
3
3
|
require 'delayed_cron_job/cronline'
|
4
4
|
require 'delayed_cron_job/plugin'
|
5
5
|
require 'delayed_cron_job/version'
|
6
|
+
require 'delayed_cron_job/backend/updatable_cron'
|
6
7
|
|
7
8
|
module DelayedCronJob
|
8
9
|
|
@@ -11,10 +12,14 @@ end
|
|
11
12
|
if defined?(Delayed::Backend::Mongoid)
|
12
13
|
Delayed::Backend::Mongoid::Job.field :cron, :type => String
|
13
14
|
Delayed::Backend::Mongoid::Job.attr_accessible(:cron) if Delayed::Backend::Mongoid::Job.respond_to?(:attr_accessible)
|
15
|
+
Delayed::Backend::Mongoid::Job.send(:include, DelayedCronJob::Backend::UpdatableCron)
|
14
16
|
end
|
15
17
|
|
16
|
-
if defined?(Delayed::Backend::ActiveRecord)
|
17
|
-
Delayed::Backend::ActiveRecord::Job.
|
18
|
+
if defined?(Delayed::Backend::ActiveRecord)
|
19
|
+
Delayed::Backend::ActiveRecord::Job.send(:include, DelayedCronJob::Backend::UpdatableCron)
|
20
|
+
if Delayed::Backend::ActiveRecord::Job.respond_to?(:attr_accessible)
|
21
|
+
Delayed::Backend::ActiveRecord::Job.attr_accessible(:cron)
|
22
|
+
end
|
18
23
|
end
|
19
24
|
|
20
25
|
Delayed::Worker.plugins << DelayedCronJob::Plugin
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module DelayedCronJob
|
2
|
+
module Backend
|
3
|
+
module UpdatableCron
|
4
|
+
|
5
|
+
def self.included(klass)
|
6
|
+
klass.send(:before_save, :set_next_run_at, :if => :cron_changed?)
|
7
|
+
end
|
8
|
+
|
9
|
+
def set_next_run_at
|
10
|
+
if cron.present?
|
11
|
+
self.run_at = Cronline.new(cron).next_time(Delayed::Job.db_time_now)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -2,20 +2,12 @@ module DelayedCronJob
|
|
2
2
|
class Plugin < Delayed::Plugin
|
3
3
|
|
4
4
|
class << self
|
5
|
-
def next_run_at(job)
|
6
|
-
job.run_at = Cronline.new(job.cron).next_time(Delayed::Job.db_time_now)
|
7
|
-
end
|
8
|
-
|
9
5
|
def cron?(job)
|
10
6
|
job.cron.present?
|
11
7
|
end
|
12
8
|
end
|
13
9
|
|
14
10
|
callbacks do |lifecycle|
|
15
|
-
# Calculate the next run_at based on the cron attribute before enqueue.
|
16
|
-
lifecycle.before(:enqueue) do |job|
|
17
|
-
next_run_at(job) if cron?(job)
|
18
|
-
end
|
19
11
|
|
20
12
|
# Prevent rescheduling of failed jobs as this is already done
|
21
13
|
# after perform.
|
@@ -39,6 +31,13 @@ module DelayedCronJob
|
|
39
31
|
end
|
40
32
|
end
|
41
33
|
|
34
|
+
# Update the cron expression from the database in case it was updated.
|
35
|
+
lifecycle.after(:invoke_job) do |job|
|
36
|
+
if cron?(job)
|
37
|
+
job.cron = job.class.where(:id => job.id).pluck(:cron).first
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
42
41
|
# Schedule the next run based on the cron attribute.
|
43
42
|
lifecycle.after(:perform) do |worker, job|
|
44
43
|
if cron?(job)
|
@@ -48,7 +47,6 @@ module DelayedCronJob
|
|
48
47
|
next_job.locked_at = nil
|
49
48
|
next_job.locked_by = nil
|
50
49
|
next_job.attempts += 1
|
51
|
-
next_run_at(next_job)
|
52
50
|
next_job.save!
|
53
51
|
end
|
54
52
|
end
|
@@ -31,7 +31,7 @@ describe DelayedCronJob do
|
|
31
31
|
|
32
32
|
it 'schedules a new job after success' do
|
33
33
|
job.update_column(:run_at, now)
|
34
|
-
job.reload
|
34
|
+
job.reload # adjusts granularity of run_at datetime
|
35
35
|
|
36
36
|
worker.work_off
|
37
37
|
|
@@ -48,7 +48,7 @@ describe DelayedCronJob do
|
|
48
48
|
it 'schedules a new job after failure' do
|
49
49
|
allow_any_instance_of(TestJob).to receive(:perform).and_raise('Fail!')
|
50
50
|
job.update(run_at: now)
|
51
|
-
job.reload
|
51
|
+
job.reload # adjusts granularity of run_at datetime
|
52
52
|
|
53
53
|
worker.work_off
|
54
54
|
|
@@ -98,7 +98,7 @@ describe DelayedCronJob do
|
|
98
98
|
expect(j.last_error).to eq(nil)
|
99
99
|
end
|
100
100
|
|
101
|
-
it 'has
|
101
|
+
it 'has updated last_error after failure' do
|
102
102
|
allow_any_instance_of(TestJob).to receive(:perform).and_raise('Fail!')
|
103
103
|
job.update(run_at: now, last_error: 'Last error')
|
104
104
|
|
@@ -138,6 +138,36 @@ describe DelayedCronJob do
|
|
138
138
|
j = Delayed::Job.first
|
139
139
|
expect(j.attempts).to eq(job.attempts + 1)
|
140
140
|
end
|
141
|
+
|
142
|
+
it 'updates run_at if cron is changed' do
|
143
|
+
job.update!(cron: '1 10 * * *')
|
144
|
+
expect(job.run_at.min).to eq(1)
|
145
|
+
end
|
146
|
+
|
147
|
+
it 'uses new cron when this is updated while job is running' do
|
148
|
+
job.update_column(:run_at, now)
|
149
|
+
allow_any_instance_of(TestJob).to receive(:perform) { job.update!(cron: '1 10 * * *') }
|
150
|
+
|
151
|
+
worker.work_off
|
152
|
+
|
153
|
+
j = Delayed::Job.first
|
154
|
+
expect(j.run_at.min).to eq(1)
|
155
|
+
end
|
156
|
+
|
157
|
+
it 'does not reschedule job if cron is cleared while job is running' do
|
158
|
+
job.update_column(:run_at, now)
|
159
|
+
allow_any_instance_of(TestJob).to receive(:perform) { job.update!(cron: '') }
|
160
|
+
|
161
|
+
expect { worker.work_off }.to change { Delayed::Job.count }.by(-1)
|
162
|
+
end
|
163
|
+
|
164
|
+
it 'does not reschedule job if model is deleted while job is running' do
|
165
|
+
job.update_column(:run_at, now)
|
166
|
+
allow_any_instance_of(TestJob).to receive(:perform) { job.destroy! }
|
167
|
+
|
168
|
+
expect { worker.work_off }.to change { Delayed::Job.count }.by(-1)
|
169
|
+
end
|
170
|
+
|
141
171
|
end
|
142
172
|
|
143
173
|
context 'without cron' do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: delayed_cron_job
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.
|
4
|
+
version: 0.7.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pascal Zumkehr
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-05-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: delayed_job
|
@@ -129,6 +129,7 @@ files:
|
|
129
129
|
- lib/delayed_cron_job.rb
|
130
130
|
- lib/delayed_cron_job/active_job/enqueuing.rb
|
131
131
|
- lib/delayed_cron_job/active_job/queue_adapter.rb
|
132
|
+
- lib/delayed_cron_job/backend/updatable_cron.rb
|
132
133
|
- lib/delayed_cron_job/cronline.rb
|
133
134
|
- lib/delayed_cron_job/plugin.rb
|
134
135
|
- lib/delayed_cron_job/version.rb
|
@@ -157,7 +158,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
157
158
|
version: '0'
|
158
159
|
requirements: []
|
159
160
|
rubyforge_project:
|
160
|
-
rubygems_version: 2.4.
|
161
|
+
rubygems_version: 2.4.8
|
161
162
|
signing_key:
|
162
163
|
specification_version: 4
|
163
164
|
summary: An extension to Delayed::Job that allows you to set cron expressions for
|