resque-scheduler 2.0.1 → 2.1.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.
Potentially problematic release.
This version of resque-scheduler might be problematic. Click here for more details.
- data/.rubocop.yml +120 -0
- data/.travis.yml +10 -0
- data/AUTHORS.md +59 -0
- data/CONTRIBUTING.md +6 -0
- data/Gemfile +3 -7
- data/HISTORY.md +41 -6
- data/LICENSE +3 -1
- data/{README.markdown → README.md} +171 -103
- data/Rakefile +22 -9
- data/lib/resque/scheduler.rb +22 -9
- data/lib/resque_scheduler.rb +49 -13
- data/lib/resque_scheduler/logger_builder.rb +51 -0
- data/lib/resque_scheduler/server/views/delayed.erb +2 -1
- data/lib/resque_scheduler/server/views/scheduler.erb +3 -2
- data/lib/resque_scheduler/tasks.rb +9 -3
- data/lib/resque_scheduler/version.rb +1 -1
- data/resque-scheduler.gemspec +24 -19
- data/script/migrate_to_timestamps_set.rb +14 -0
- data/test/delayed_queue_test.rb +50 -15
- data/test/resque-web_test.rb +3 -3
- data/test/scheduler_args_test.rb +1 -1
- data/test/scheduler_setup_test.rb +59 -0
- data/test/scheduler_test.rb +11 -0
- data/test/test_helper.rb +9 -2
- metadata +102 -9
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'redis'
|
2
|
+
require 'resque'
|
3
|
+
|
4
|
+
if ARGV.size != 1
|
5
|
+
puts "migrate_to_timestamps_set.rb <redis-host:redis-port>"
|
6
|
+
exit
|
7
|
+
end
|
8
|
+
|
9
|
+
Resque.redis = ARGV[0]
|
10
|
+
redis = Resque.redis
|
11
|
+
Array(redis.keys("delayed:*")).each do |key|
|
12
|
+
jobs = redis.lrange(key, 0, -1)
|
13
|
+
jobs.each {|job| redis.sadd("timestamps:#{job}", key)}
|
14
|
+
end
|
data/test/delayed_queue_test.rb
CHANGED
@@ -8,20 +8,21 @@ context "DelayedQueue" do
|
|
8
8
|
end
|
9
9
|
|
10
10
|
test "enqueue_at adds correct list and zset" do
|
11
|
-
timestamp = Time.now
|
11
|
+
timestamp = Time.now + 1
|
12
|
+
encoded_job = Resque.encode({:class => SomeIvarJob.to_s, :args => ["path"], :queue => Resque.queue_from_class(SomeIvarJob)})
|
12
13
|
|
13
14
|
assert_equal(0, Resque.redis.llen("delayed:#{timestamp.to_i}").to_i, "delayed queue should be empty to start")
|
15
|
+
assert_equal(0, Resque.redis.scard("timestamps:#{encoded_job}"), "job timestamps set should be empty to start")
|
14
16
|
|
15
17
|
Resque.enqueue_at(timestamp, SomeIvarJob, "path")
|
16
18
|
|
17
19
|
# Confirm the correct keys were added
|
18
20
|
assert_equal(1, Resque.redis.llen("delayed:#{timestamp.to_i}").to_i, "delayed queue should have one entry now")
|
21
|
+
assert_equal(1, Resque.redis.scard("timestamps:#{encoded_job}"), "job timestamps should have one entry now")
|
19
22
|
assert_equal(1, Resque.redis.zcard(:delayed_queue_schedule), "The delayed_queue_schedule should have 1 entry now")
|
20
23
|
|
21
|
-
read_timestamp =
|
24
|
+
read_timestamp = timestamp.to_i
|
22
25
|
|
23
|
-
# Confirm the timestamp came out correctly
|
24
|
-
assert_equal(timestamp.to_i, read_timestamp, "The timestamp we pull out of redis should match the one we put in")
|
25
26
|
item = Resque.next_item_for_timestamp(read_timestamp)
|
26
27
|
|
27
28
|
# Confirm the item came out correctly
|
@@ -31,23 +32,25 @@ context "DelayedQueue" do
|
|
31
32
|
# And now confirm the keys are gone
|
32
33
|
assert(!Resque.redis.exists("delayed:#{timestamp.to_i}"))
|
33
34
|
assert_equal(0, Resque.redis.zcard(:delayed_queue_schedule), "delayed queue should be empty")
|
35
|
+
assert_equal(0, Resque.redis.scard("timestamps:#{encoded_job}"), "job timestamps set should be empty")
|
34
36
|
end
|
35
37
|
|
36
38
|
test "enqueue_at with queue adds correct list and zset and queue" do
|
37
|
-
timestamp = Time.now
|
39
|
+
timestamp = Time.now + 1
|
40
|
+
encoded_job = Resque.encode({:class => SomeIvarJob.to_s, :args => ["path"], :queue => 'critical'})
|
38
41
|
|
39
42
|
assert_equal(0, Resque.redis.llen("delayed:#{timestamp.to_i}").to_i, "delayed queue should be empty to start")
|
43
|
+
assert_equal(0, Resque.redis.scard("timestamps:#{encoded_job}"), "job timestamps set should be empty to start")
|
40
44
|
|
41
45
|
Resque.enqueue_at_with_queue('critical', timestamp, SomeIvarJob, "path")
|
42
46
|
|
43
47
|
# Confirm the correct keys were added
|
44
48
|
assert_equal(1, Resque.redis.llen("delayed:#{timestamp.to_i}").to_i, "delayed queue should have one entry now")
|
49
|
+
assert_equal(1, Resque.redis.scard("timestamps:#{encoded_job}"), "job timestamps should have one entry now")
|
45
50
|
assert_equal(1, Resque.redis.zcard(:delayed_queue_schedule), "The delayed_queue_schedule should have 1 entry now")
|
46
51
|
|
47
|
-
read_timestamp =
|
52
|
+
read_timestamp = timestamp.to_i
|
48
53
|
|
49
|
-
# Confirm the timestamp came out correctly
|
50
|
-
assert_equal(timestamp.to_i, read_timestamp, "The timestamp we pull out of redis should match the one we put in")
|
51
54
|
item = Resque.next_item_for_timestamp(read_timestamp)
|
52
55
|
|
53
56
|
# Confirm the item came out correctly
|
@@ -58,17 +61,21 @@ context "DelayedQueue" do
|
|
58
61
|
# And now confirm the keys are gone
|
59
62
|
assert(!Resque.redis.exists("delayed:#{timestamp.to_i}"))
|
60
63
|
assert_equal(0, Resque.redis.zcard(:delayed_queue_schedule), "delayed queue should be empty")
|
64
|
+
assert_equal(0, Resque.redis.scard("timestamps:#{encoded_job}"), "job timestamps set should be empty")
|
61
65
|
end
|
62
66
|
|
63
67
|
test "a job in the future doesn't come out" do
|
64
68
|
timestamp = Time.now + 600 # 10 minutes from now (in the future, shouldn't come out)
|
69
|
+
encoded_job = Resque.encode({:class => SomeIvarJob.to_s, :args => ["path"], :queue => Resque.queue_from_class(SomeIvarJob)})
|
65
70
|
|
66
71
|
assert_equal(0, Resque.redis.llen("delayed:#{timestamp.to_i}").to_i, "delayed queue should be empty to start")
|
72
|
+
assert_equal(0, Resque.redis.scard("timestamps:#{encoded_job}"), "job timestamps set should be empty to start")
|
67
73
|
|
68
74
|
Resque.enqueue_at(timestamp, SomeIvarJob, "path")
|
69
75
|
|
70
76
|
# Confirm the correct keys were added
|
71
77
|
assert_equal(1, Resque.redis.llen("delayed:#{timestamp.to_i}").to_i, "delayed queue should have one entry now")
|
78
|
+
assert_equal(1, Resque.redis.scard("timestamps:#{encoded_job}"), "job timestamps should have one entry now")
|
72
79
|
assert_equal(1, Resque.redis.zcard(:delayed_queue_schedule), "The delayed_queue_schedule should have 1 entry now")
|
73
80
|
|
74
81
|
read_timestamp = Resque.next_delayed_timestamp
|
@@ -88,19 +95,21 @@ context "DelayedQueue" do
|
|
88
95
|
|
89
96
|
test "enqueue_at and enqueue_in are equivelent" do
|
90
97
|
timestamp = Time.now + 60
|
98
|
+
encoded_job = Resque.encode({:class => SomeIvarJob.to_s, :args => ["path"], :queue => Resque.queue_from_class(SomeIvarJob)})
|
91
99
|
|
92
100
|
Resque.enqueue_at(timestamp, SomeIvarJob, "path")
|
93
101
|
Resque.enqueue_in(timestamp - Time.now, SomeIvarJob, "path")
|
94
102
|
|
95
103
|
assert_equal(1, Resque.redis.zcard(:delayed_queue_schedule), "should have one timestamp in the delayed queue")
|
96
104
|
assert_equal(2, Resque.redis.llen("delayed:#{timestamp.to_i}"), "should have 2 items in the timestamp queue")
|
105
|
+
assert_equal(1, Resque.redis.scard("timestamps:#{encoded_job}"), "job timestamps should have one entry now")
|
97
106
|
end
|
98
107
|
|
99
108
|
test "empty delayed_queue_peek returns empty array" do
|
100
109
|
assert_equal([], Resque.delayed_queue_peek(0,20))
|
101
110
|
end
|
102
111
|
|
103
|
-
test "
|
112
|
+
test "delayed_queue_peek returns stuff" do
|
104
113
|
t = Time.now
|
105
114
|
expected_timestamps = (1..5).to_a.map do |i|
|
106
115
|
(t + 60 + i).to_i
|
@@ -166,12 +175,11 @@ context "DelayedQueue" do
|
|
166
175
|
|
167
176
|
test "handle_delayed_item with items" do
|
168
177
|
t = Time.now - 60 # in the past
|
169
|
-
Resque.enqueue_at(t, SomeIvarJob)
|
170
|
-
Resque.enqueue_at(t, SomeIvarJob)
|
171
178
|
|
172
179
|
# 2 SomeIvarJob jobs should be created in the "ivar" queue
|
173
|
-
Resque::Job.expects(:create).twice.with(
|
174
|
-
Resque
|
180
|
+
Resque::Job.expects(:create).twice.with(:ivar, SomeIvarJob)
|
181
|
+
Resque.enqueue_at(t, SomeIvarJob)
|
182
|
+
Resque.enqueue_at(t, SomeIvarJob)
|
175
183
|
end
|
176
184
|
|
177
185
|
test "handle_delayed_items with items in the future" do
|
@@ -186,9 +194,8 @@ context "DelayedQueue" do
|
|
186
194
|
|
187
195
|
test "calls klass#scheduled when enqueuing jobs if it exists" do
|
188
196
|
t = Time.now - 60
|
197
|
+
FakeCustomJobClassEnqueueAt.expects(:scheduled).once.with(:test, FakeCustomJobClassEnqueueAt.to_s, {:foo => "bar"})
|
189
198
|
Resque.enqueue_at(t, FakeCustomJobClassEnqueueAt, :foo => "bar")
|
190
|
-
FakeCustomJobClassEnqueueAt.expects(:scheduled).once.with('test', FakeCustomJobClassEnqueueAt.to_s, {"foo" => "bar"})
|
191
|
-
Resque::Scheduler.handle_delayed_items
|
192
199
|
end
|
193
200
|
|
194
201
|
test "when Resque.inline = true, calls klass#scheduled when enqueuing jobs if it exists" do
|
@@ -218,6 +225,24 @@ context "DelayedQueue" do
|
|
218
225
|
assert_equal(0, Resque.delayed_timestamp_peek(t, 0, 3).length)
|
219
226
|
end
|
220
227
|
|
228
|
+
test "enqueue_delayed creates jobs and empties the delayed queue" do
|
229
|
+
t = Time.now + 60
|
230
|
+
|
231
|
+
Resque.enqueue_at(t, SomeIvarJob, "foo")
|
232
|
+
Resque.enqueue_at(t, SomeIvarJob, "bar")
|
233
|
+
Resque.enqueue_at(t, SomeIvarJob, "bar")
|
234
|
+
|
235
|
+
# 3 SomeIvarJob jobs should be created in the "ivar" queue
|
236
|
+
Resque::Job.expects(:create).never.with(:ivar, SomeIvarJob, "foo")
|
237
|
+
Resque::Job.expects(:create).twice.with(:ivar, SomeIvarJob, "bar")
|
238
|
+
|
239
|
+
# 2 SomeIvarJob jobs should be enqueued
|
240
|
+
assert_equal(2, Resque.enqueue_delayed(SomeIvarJob, "bar"))
|
241
|
+
|
242
|
+
# delayed queue for timestamp should have one remaining
|
243
|
+
assert_equal(1, Resque.delayed_timestamp_peek(t, 0, 3).length)
|
244
|
+
end
|
245
|
+
|
221
246
|
test "handle_delayed_items works with out specifying queue (upgrade case)" do
|
222
247
|
t = Time.now - 60
|
223
248
|
Resque.delayed_push(t, :class => 'SomeIvarJob')
|
@@ -237,13 +262,23 @@ context "DelayedQueue" do
|
|
237
262
|
|
238
263
|
Resque.reset_delayed_queue
|
239
264
|
assert_equal(0, Resque.delayed_queue_schedule_size)
|
265
|
+
assert_equal(0, Resque.redis.keys("timestamps:*").size)
|
240
266
|
end
|
241
267
|
|
242
268
|
test "remove_delayed removes job and returns the count" do
|
243
269
|
t = Time.now + 120
|
270
|
+
encoded_job = Resque.encode({:class => SomeIvarJob.to_s, :args => [], :queue => Resque.queue_from_class(SomeIvarJob)})
|
244
271
|
Resque.enqueue_at(t, SomeIvarJob)
|
245
272
|
|
246
273
|
assert_equal(1, Resque.remove_delayed(SomeIvarJob))
|
274
|
+
assert_equal(0, Resque.redis.scard("timestamps:#{encoded_job}"))
|
275
|
+
end
|
276
|
+
|
277
|
+
test "scheduled_at returns an array containing job schedule time" do
|
278
|
+
t = Time.now + 120
|
279
|
+
Resque.enqueue_at(t, SomeIvarJob)
|
280
|
+
|
281
|
+
assert_equal([t.to_i], Resque.scheduled_at(SomeIvarJob))
|
247
282
|
end
|
248
283
|
|
249
284
|
test "remove_delayed doesn't remove things it shouldn't" do
|
data/test/resque-web_test.rb
CHANGED
@@ -10,10 +10,10 @@ context "on GET to /schedule" do
|
|
10
10
|
end
|
11
11
|
|
12
12
|
context "on GET to /schedule with scheduled jobs" do
|
13
|
-
setup do
|
13
|
+
setup do
|
14
14
|
ENV['rails_env'] = 'production'
|
15
|
-
Resque.schedule = {
|
16
|
-
|
15
|
+
Resque.schedule = {'some_ivar_job' => {'cron' => "* * * * *", 'class' => 'SomeIvarJob', 'args' => "/tmp", 'rails_env' => 'production'},
|
16
|
+
'some_other_job' => {'every' => ['5m'], 'queue' => 'high', 'class' => 'SomeOtherJob', 'args' => {'b' => 'blah'}}}
|
17
17
|
Resque::Scheduler.load_schedule!
|
18
18
|
get "/schedule"
|
19
19
|
end
|
data/test/scheduler_args_test.rb
CHANGED
@@ -77,7 +77,7 @@ context "scheduling jobs with arguments" do
|
|
77
77
|
test "calls the worker without arguments when 'args' is blank in the config" do
|
78
78
|
Resque::Scheduler.enqueue_from_config(YAML.load(<<-YAML))
|
79
79
|
class: SomeIvarJob
|
80
|
-
args:
|
80
|
+
args:
|
81
81
|
YAML
|
82
82
|
SomeIvarJob.expects(:perform).once.with()
|
83
83
|
Resque.reserve('ivar').perform
|
@@ -0,0 +1,59 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper'
|
2
|
+
|
3
|
+
context "Resque::Scheduler" do
|
4
|
+
|
5
|
+
setup do
|
6
|
+
Resque::Scheduler.dynamic = false
|
7
|
+
Resque.redis.flushall
|
8
|
+
Resque::Scheduler.clear_schedule!
|
9
|
+
end
|
10
|
+
|
11
|
+
test 'set custom logger' do
|
12
|
+
custom_logger = Logger.new('/dev/null')
|
13
|
+
Resque::Scheduler.logger = custom_logger
|
14
|
+
assert_equal(custom_logger, Resque::Scheduler.logger)
|
15
|
+
end
|
16
|
+
|
17
|
+
context 'logger default settings' do
|
18
|
+
setup do
|
19
|
+
nullify_logger
|
20
|
+
end
|
21
|
+
|
22
|
+
test 'uses STDOUT' do
|
23
|
+
assert_equal(Resque::Scheduler.logger.instance_variable_get(:@logdev).dev, STDOUT)
|
24
|
+
end
|
25
|
+
test 'not verbose' do
|
26
|
+
assert Resque::Scheduler.logger.level > Logger::DEBUG
|
27
|
+
end
|
28
|
+
test 'not muted' do
|
29
|
+
assert Resque::Scheduler.logger.level < Logger::FATAL
|
30
|
+
end
|
31
|
+
|
32
|
+
teardown do
|
33
|
+
nullify_logger
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
context 'logger custom settings' do
|
38
|
+
setup do
|
39
|
+
nullify_logger
|
40
|
+
end
|
41
|
+
|
42
|
+
test 'uses logfile' do
|
43
|
+
Resque::Scheduler.logfile = '/dev/null'
|
44
|
+
assert_equal(Resque::Scheduler.logger.instance_variable_get(:@logdev).filename, '/dev/null')
|
45
|
+
end
|
46
|
+
test 'set verbosity' do
|
47
|
+
Resque::Scheduler.verbose = true
|
48
|
+
assert Resque::Scheduler.logger.level == Logger::DEBUG
|
49
|
+
end
|
50
|
+
test 'mute logger' do
|
51
|
+
Resque::Scheduler.mute = true
|
52
|
+
assert Resque::Scheduler.logger.level == Logger::FATAL
|
53
|
+
end
|
54
|
+
|
55
|
+
teardown do
|
56
|
+
nullify_logger
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
data/test/scheduler_test.rb
CHANGED
@@ -191,6 +191,17 @@ context "Resque::Scheduler" do
|
|
191
191
|
assert_equal({'cron' => "* * * * *", 'class' => 'SomeIvarJob', 'args' => "/tmp/75"},
|
192
192
|
Resque.decode(Resque.redis.hget(:schedules, "my_ivar_job")))
|
193
193
|
end
|
194
|
+
|
195
|
+
test "schedule= removes schedules not present in the given schedule argument" do
|
196
|
+
Resque::Scheduler.dynamic = true
|
197
|
+
|
198
|
+
Resque.schedule = {"old_job" => {'cron' => "* * * * *", 'class' => 'OldJob'}}
|
199
|
+
assert_equal({"old_job" => {'cron' => "* * * * *", 'class' => 'OldJob'}}, Resque.schedule)
|
200
|
+
|
201
|
+
Resque.schedule = {"new_job" => {'cron' => "* * * * *", 'class' => 'NewJob'}}
|
202
|
+
Resque.reload_schedule!
|
203
|
+
assert_equal({"new_job" => {'cron' => "* * * * *", 'class' => 'NewJob'}}, Resque.schedule)
|
204
|
+
end
|
194
205
|
|
195
206
|
test "schedule= uses job name as 'class' argument if it's missing" do
|
196
207
|
Resque::Scheduler.dynamic = true
|
data/test/test_helper.rb
CHANGED
@@ -6,7 +6,7 @@ dir = File.dirname(File.expand_path(__FILE__))
|
|
6
6
|
|
7
7
|
require 'rubygems'
|
8
8
|
require 'test/unit'
|
9
|
-
require 'mocha'
|
9
|
+
require 'mocha/setup'
|
10
10
|
require 'resque'
|
11
11
|
$LOAD_PATH.unshift File.dirname(File.expand_path(__FILE__)) + '/../lib'
|
12
12
|
require 'resque_scheduler'
|
@@ -57,7 +57,7 @@ def context(*args, &block)
|
|
57
57
|
def self.teardown(&block) define_method(:teardown, &block) end
|
58
58
|
end
|
59
59
|
(class << klass; self end).send(:define_method, :name) { name.gsub(/\W/,'_') }
|
60
|
-
klass.class_eval
|
60
|
+
klass.class_eval(&block)
|
61
61
|
end
|
62
62
|
|
63
63
|
class FakeCustomJobClass
|
@@ -83,3 +83,10 @@ class SomeRealClass
|
|
83
83
|
:some_real_queue
|
84
84
|
end
|
85
85
|
end
|
86
|
+
|
87
|
+
def nullify_logger
|
88
|
+
Resque::Scheduler.mute = nil
|
89
|
+
Resque::Scheduler.verbose = nil
|
90
|
+
Resque::Scheduler.logfile = nil
|
91
|
+
Resque::Scheduler.logger = nil
|
92
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: resque-scheduler
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0
|
4
|
+
version: 2.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,16 +9,64 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-09-20 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '1.3'
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '1.3'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: mocha
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :development
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: rack-test
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: rake
|
16
64
|
requirement: !ruby/object:Gem::Requirement
|
17
65
|
none: false
|
18
66
|
requirements:
|
19
67
|
- - ! '>='
|
20
68
|
- !ruby/object:Gem::Version
|
21
|
-
version:
|
69
|
+
version: '0'
|
22
70
|
type: :development
|
23
71
|
prerelease: false
|
24
72
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -26,7 +74,23 @@ dependencies:
|
|
26
74
|
requirements:
|
27
75
|
- - ! '>='
|
28
76
|
- !ruby/object:Gem::Version
|
29
|
-
version:
|
77
|
+
version: '0'
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: rubocop
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
86
|
+
type: :development
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
30
94
|
- !ruby/object:Gem::Dependency
|
31
95
|
name: redis
|
32
96
|
requirement: !ruby/object:Gem::Requirement
|
@@ -51,6 +115,9 @@ dependencies:
|
|
51
115
|
- - ! '>='
|
52
116
|
- !ruby/object:Gem::Version
|
53
117
|
version: 1.20.0
|
118
|
+
- - <
|
119
|
+
- !ruby/object:Gem::Version
|
120
|
+
version: '1.25'
|
54
121
|
type: :runtime
|
55
122
|
prerelease: false
|
56
123
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -59,6 +126,9 @@ dependencies:
|
|
59
126
|
- - ! '>='
|
60
127
|
- !ruby/object:Gem::Version
|
61
128
|
version: 1.20.0
|
129
|
+
- - <
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '1.25'
|
62
132
|
- !ruby/object:Gem::Dependency
|
63
133
|
name: rufus-scheduler
|
64
134
|
requirement: !ruby/object:Gem::Requirement
|
@@ -85,10 +155,14 @@ extensions: []
|
|
85
155
|
extra_rdoc_files: []
|
86
156
|
files:
|
87
157
|
- .gitignore
|
158
|
+
- .rubocop.yml
|
159
|
+
- .travis.yml
|
160
|
+
- AUTHORS.md
|
161
|
+
- CONTRIBUTING.md
|
88
162
|
- Gemfile
|
89
163
|
- HISTORY.md
|
90
164
|
- LICENSE
|
91
|
-
- README.
|
165
|
+
- README.md
|
92
166
|
- Rakefile
|
93
167
|
- lib/resque/scheduler.rb
|
94
168
|
- lib/resque/scheduler/lock.rb
|
@@ -97,6 +171,7 @@ files:
|
|
97
171
|
- lib/resque/scheduler/lock/resilient.rb
|
98
172
|
- lib/resque/scheduler_locking.rb
|
99
173
|
- lib/resque_scheduler.rb
|
174
|
+
- lib/resque_scheduler/logger_builder.rb
|
100
175
|
- lib/resque_scheduler/plugin.rb
|
101
176
|
- lib/resque_scheduler/server.rb
|
102
177
|
- lib/resque_scheduler/server/views/delayed.erb
|
@@ -105,6 +180,7 @@ files:
|
|
105
180
|
- lib/resque_scheduler/tasks.rb
|
106
181
|
- lib/resque_scheduler/version.rb
|
107
182
|
- resque-scheduler.gemspec
|
183
|
+
- script/migrate_to_timestamps_set.rb
|
108
184
|
- tasks/resque_scheduler.rake
|
109
185
|
- test/delayed_queue_test.rb
|
110
186
|
- test/redis-test.conf
|
@@ -112,31 +188,48 @@ files:
|
|
112
188
|
- test/scheduler_args_test.rb
|
113
189
|
- test/scheduler_hooks_test.rb
|
114
190
|
- test/scheduler_locking_test.rb
|
191
|
+
- test/scheduler_setup_test.rb
|
115
192
|
- test/scheduler_test.rb
|
116
193
|
- test/support/redis_instance.rb
|
117
194
|
- test/test_helper.rb
|
118
|
-
homepage: http://github.com/
|
195
|
+
homepage: http://github.com/resque/resque-scheduler
|
119
196
|
licenses: []
|
120
197
|
post_install_message:
|
121
198
|
rdoc_options: []
|
122
199
|
require_paths:
|
123
|
-
- lib
|
200
|
+
- - lib
|
124
201
|
required_ruby_version: !ruby/object:Gem::Requirement
|
125
202
|
none: false
|
126
203
|
requirements:
|
127
204
|
- - ! '>='
|
128
205
|
- !ruby/object:Gem::Version
|
129
206
|
version: '0'
|
207
|
+
segments:
|
208
|
+
- 0
|
209
|
+
hash: 2224918234097590124
|
130
210
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
131
211
|
none: false
|
132
212
|
requirements:
|
133
213
|
- - ! '>='
|
134
214
|
- !ruby/object:Gem::Version
|
135
|
-
version:
|
215
|
+
version: '0'
|
216
|
+
segments:
|
217
|
+
- 0
|
218
|
+
hash: 2224918234097590124
|
136
219
|
requirements: []
|
137
220
|
rubyforge_project:
|
138
221
|
rubygems_version: 1.8.23
|
139
222
|
signing_key:
|
140
223
|
specification_version: 3
|
141
224
|
summary: Light weight job scheduling on top of Resque
|
142
|
-
test_files:
|
225
|
+
test_files:
|
226
|
+
- test/delayed_queue_test.rb
|
227
|
+
- test/redis-test.conf
|
228
|
+
- test/resque-web_test.rb
|
229
|
+
- test/scheduler_args_test.rb
|
230
|
+
- test/scheduler_hooks_test.rb
|
231
|
+
- test/scheduler_locking_test.rb
|
232
|
+
- test/scheduler_setup_test.rb
|
233
|
+
- test/scheduler_test.rb
|
234
|
+
- test/support/redis_instance.rb
|
235
|
+
- test/test_helper.rb
|