when-do 1.1.6 → 2.0.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 +4 -4
- data/README.md +3 -3
- data/lib/when-do/do.rb +11 -9
- data/lib/when-do/job.rb +25 -0
- data/lib/when-do/version.rb +3 -0
- data/lib/when-do.rb +16 -6
- data/spec/lib/when-do/do_spec.rb +26 -12
- data/spec/lib/when-do/job_spec.rb +102 -0
- data/spec/lib/when-do_spec.rb +43 -6
- data/when-do.gemspec +12 -11
- metadata +39 -35
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d239b9c341f86627431530ca699c631c239eddb1
|
4
|
+
data.tar.gz: 5cdd7489b259bc86dfa76de4910c54df1c7b7e42
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bb8a96457d0f7e4d60103e9b4f6e3f2b78727e31224802f7b39c6b0c93ef046673cfcd1a36b085650e145e6177c7b0d05d3ae3f5be71328e19904a912191399f
|
7
|
+
data.tar.gz: c364fc711079505331c5be0668b90e2875998ab823ee7052a9f66813cb6921b0fce3caa353b838c3ca1e903304001599afecc6fc6980c48499963c8372f52c0a
|
data/README.md
CHANGED
@@ -44,15 +44,15 @@ Then, from your app...
|
|
44
44
|
|
45
45
|
Queue a job now:
|
46
46
|
|
47
|
-
When.enqueue(WorkerClass, args,
|
47
|
+
When.enqueue(WorkerClass, args: ['array', 'of', 'args'], worker_args: {'retry' => 'false'})
|
48
48
|
|
49
49
|
Queue a job later (minute precision):
|
50
50
|
|
51
|
-
When.enqueue_at(Time.now + 60, WorkerClass, args,
|
51
|
+
When.enqueue_at(Time.now + 60, WorkerClass, args: ['array', 'of', 'args'], worker_args: {'queue' => 'my_other_work_queue'})
|
52
52
|
|
53
53
|
Schedule a job (only numbers are supported in cron strings):
|
54
54
|
|
55
|
-
When.schedule('schedule_name', '0 * * * *', WorkerClass, args,
|
55
|
+
When.schedule('schedule_name', '0 * * * *', WorkerClass, args: ['array', 'of', 'args'], worker_args: {'hash' => 'of_worker_args'})
|
56
56
|
|
57
57
|
Unschedule a job:
|
58
58
|
|
data/lib/when-do/do.rb
CHANGED
@@ -117,10 +117,10 @@ module When
|
|
117
117
|
logger.info("Analyzing #{schedules.count} schedules.")
|
118
118
|
scheduled_jobs = schedules.inject([]) do |jobs, s|
|
119
119
|
schedule = JSON.parse(s)
|
120
|
-
if cron = When::Cron.valid(schedule['cron'])
|
121
|
-
|
122
|
-
|
123
|
-
|
120
|
+
if (cron = When::Cron.valid(schedule['cron'])) && cron == started_at
|
121
|
+
job = schedule.merge('jid' => SecureRandom.uuid)
|
122
|
+
job.delete('cron')
|
123
|
+
jobs << job
|
124
124
|
else
|
125
125
|
logger.error { "Could not interpret cron for #{schedule.inspect}" }
|
126
126
|
end
|
@@ -132,10 +132,11 @@ module When
|
|
132
132
|
|
133
133
|
def queue_delayed(started_at)
|
134
134
|
logger.info("Checking for delayed jobs.")
|
135
|
-
|
135
|
+
raw_delayed_jobs = redis.multi do
|
136
136
|
redis.zrevrangebyscore(delayed_queue_key, started_at.to_i, '-inf')
|
137
137
|
redis.zremrangebyscore(delayed_queue_key, '-inf', started_at.to_i)
|
138
138
|
end[0]
|
139
|
+
delayed_jobs = raw_delayed_jobs.map { |j| JSON.parse(j) }
|
139
140
|
logger.debug { "Found #{delayed_jobs.count} delayed jobs." }
|
140
141
|
enqueue(delayed_jobs) if delayed_jobs.any?
|
141
142
|
end
|
@@ -143,10 +144,11 @@ module When
|
|
143
144
|
def enqueue(jobs)
|
144
145
|
jobs.each do |job|
|
145
146
|
logger.info("Queueing: #{job}")
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
147
|
+
queue = job['queue'] || worker_queue_key
|
148
|
+
success = redis.lpush(queue, job.to_json)
|
149
|
+
unless success > 0
|
150
|
+
raise "Failed to queue #{job}. Redis returned #{success}."
|
151
|
+
end
|
150
152
|
end
|
151
153
|
end
|
152
154
|
|
data/lib/when-do/job.rb
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'when-do'
|
2
|
+
|
3
|
+
module When
|
4
|
+
class Job
|
5
|
+
attr_reader :klass, :args, :worker_args
|
6
|
+
|
7
|
+
def initialize(klass:, args: [], worker_args: {})
|
8
|
+
@klass = klass
|
9
|
+
@args = args
|
10
|
+
@worker_args = worker_args
|
11
|
+
end
|
12
|
+
|
13
|
+
def schedule(name, cron)
|
14
|
+
When.schedule(name, cron, klass, args: args, worker_args: worker_args)
|
15
|
+
end
|
16
|
+
|
17
|
+
def enqueue_at(time)
|
18
|
+
When.enqueue_at(time, klass, args: args, worker_args: worker_args)
|
19
|
+
end
|
20
|
+
|
21
|
+
def enqueue
|
22
|
+
When.enqueue(klass, args: args, worker_args: worker_args )
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
data/lib/when-do.rb
CHANGED
@@ -8,6 +8,7 @@ require 'when-cron'
|
|
8
8
|
module When
|
9
9
|
class Error < StandardError; end
|
10
10
|
class InvalidCron < Error; end
|
11
|
+
class InvalidArgs < Error; end
|
11
12
|
|
12
13
|
DEFAULT_CONFIG = {
|
13
14
|
schedule_key: 'when:schedules',
|
@@ -15,9 +16,10 @@ module When
|
|
15
16
|
delayed_queue_key: 'when:delayed'
|
16
17
|
}
|
17
18
|
|
18
|
-
def self.schedule(name, cron, klass,
|
19
|
+
def self.schedule(name, cron, klass, args: [], worker_args: {})
|
19
20
|
raise InvalidCron, "\"#{cron}\" is invalid" unless valid_cron?(cron)
|
20
|
-
|
21
|
+
validate_args(args)
|
22
|
+
schedule = worker_args.merge('class' => klass.to_s, 'cron' => cron, 'args' => args)
|
21
23
|
redis.hset(schedule_key, name.to_s, schedule.to_json)
|
22
24
|
logger.info("Scheduled '#{name}' => #{schedule}.")
|
23
25
|
end
|
@@ -49,8 +51,9 @@ module When
|
|
49
51
|
schedules.each { |k, v| schedules[k] = JSON.parse(v) }
|
50
52
|
end
|
51
53
|
|
52
|
-
def self.enqueue_at(time, klass,
|
53
|
-
|
54
|
+
def self.enqueue_at(time, klass, args: [], worker_args: {})
|
55
|
+
validate_args(args)
|
56
|
+
job = worker_args.merge('jid' => SecureRandom.uuid, 'class' => klass.to_s, 'args' => args)
|
54
57
|
if redis.zadd(delayed_queue_key, time.to_i, job.to_json)
|
55
58
|
logger.info("Delayed: will enqueue #{job} to run at #{time}.")
|
56
59
|
job['jid']
|
@@ -61,8 +64,9 @@ module When
|
|
61
64
|
end
|
62
65
|
end
|
63
66
|
|
64
|
-
def self.enqueue(klass,
|
65
|
-
|
67
|
+
def self.enqueue(klass, args: [], worker_args: {})
|
68
|
+
validate_args(args)
|
69
|
+
job = worker_args.merge('jid' => SecureRandom.uuid, 'class' => klass.to_s, 'args' => args)
|
66
70
|
if redis.lpush(worker_queue_key, job.to_json) > 0
|
67
71
|
job['jid']
|
68
72
|
else
|
@@ -118,4 +122,10 @@ module When
|
|
118
122
|
def self.worker_queue_key
|
119
123
|
config[:worker_queue_key] || 'when:queue:default'
|
120
124
|
end
|
125
|
+
|
126
|
+
private
|
127
|
+
|
128
|
+
def self.validate_args(args)
|
129
|
+
raise InvalidArgs, "must be an array" unless args.kind_of? Array
|
130
|
+
end
|
121
131
|
end
|
data/spec/lib/when-do/do_spec.rb
CHANGED
@@ -29,17 +29,17 @@ describe When::Do do
|
|
29
29
|
end
|
30
30
|
|
31
31
|
it 'returns true' do
|
32
|
-
expect(when_do.running?(started_at)).to
|
32
|
+
expect(when_do.running?(started_at)).to eq 't'
|
33
33
|
end
|
34
34
|
end
|
35
35
|
|
36
36
|
context 'the corresponding day hash and minute key do not exist in redis' do
|
37
37
|
it 'sets the day hash and minute key' do
|
38
|
-
expect { when_do.running?(started_at) }.to change { redis.hget(day_key, min_key) }.from(nil).to
|
38
|
+
expect { when_do.running?(started_at) }.to change { redis.hget(day_key, min_key) }.from(nil).to('t')
|
39
39
|
end
|
40
40
|
|
41
41
|
it 'returns false' do
|
42
|
-
expect(when_do.running?(started_at)).to
|
42
|
+
expect(when_do.running?(started_at)).to be_nil
|
43
43
|
end
|
44
44
|
end
|
45
45
|
end
|
@@ -48,15 +48,16 @@ describe When::Do do
|
|
48
48
|
context 'a scheduled item has a matching cron' do
|
49
49
|
let(:args) { ['arg1', 'arg2', 3, { 'more' => 'args' }] }
|
50
50
|
let(:klass) { String }
|
51
|
+
|
51
52
|
before do
|
52
|
-
When.schedule('test schedule', '* * * * *', klass,
|
53
|
+
When.schedule('test schedule', '* * * * *', klass, args: args)
|
53
54
|
end
|
54
55
|
|
55
56
|
it 'drops a job onto the queue' do
|
56
57
|
expect { when_do.queue_scheduled(started_at) }
|
57
58
|
.to change { redis.lpop(when_do.worker_queue_key) }
|
58
59
|
.from(nil)
|
59
|
-
.to
|
60
|
+
.to be_truthy
|
60
61
|
end
|
61
62
|
|
62
63
|
it 'includes the correct arguments' do
|
@@ -104,14 +105,14 @@ describe When::Do do
|
|
104
105
|
let(:args) { ['arg1', 'arg2', 3, { 'more' => 'args' }] }
|
105
106
|
let(:klass) { String }
|
106
107
|
before do
|
107
|
-
When.enqueue_at(started_at - 1, String,
|
108
|
+
When.enqueue_at(started_at - 1, String, args: args)
|
108
109
|
end
|
109
110
|
|
110
111
|
it 'drops a job onto the queue' do
|
111
112
|
expect { when_do.queue_delayed(started_at) }
|
112
113
|
.to change { redis.lpop(when_do.worker_queue_key) }
|
113
114
|
.from(nil)
|
114
|
-
.to
|
115
|
+
.to be_truthy
|
115
116
|
end
|
116
117
|
|
117
118
|
it 'includes the correct arguments' do
|
@@ -141,11 +142,24 @@ describe When::Do do
|
|
141
142
|
end
|
142
143
|
|
143
144
|
describe '#enqueue' do
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
145
|
+
context 'a specific queue is specified' do
|
146
|
+
let(:queue) { 'a_queue' }
|
147
|
+
let(:jobs) { [ { 'queue' => queue }, { 'queue' => queue }, {}, ] }
|
148
|
+
|
149
|
+
it 'places jobs onto the specified queue' do
|
150
|
+
when_do.enqueue(jobs)
|
151
|
+
expect(redis.llen(when_do.worker_queue_key)).to eq 1
|
152
|
+
expect(redis.llen(queue)).to eq 2
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
156
|
+
context 'no queue is specified' do
|
157
|
+
it 'places jobs onto the default work queue' do
|
158
|
+
expect { when_do.enqueue(['junk', 'jobs']) }
|
159
|
+
.to change { redis.llen(when_do.worker_queue_key) }
|
160
|
+
.from(0)
|
161
|
+
.to(2)
|
162
|
+
end
|
149
163
|
end
|
150
164
|
end
|
151
165
|
|
@@ -0,0 +1,102 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'when-do/job'
|
3
|
+
|
4
|
+
describe When::Job do
|
5
|
+
let(:redis) { When.redis }
|
6
|
+
|
7
|
+
before do
|
8
|
+
When.logger.level = 5
|
9
|
+
When.redis = Redis.new(db: 11)
|
10
|
+
redis.flushall
|
11
|
+
end
|
12
|
+
|
13
|
+
after do
|
14
|
+
redis.flushall
|
15
|
+
end
|
16
|
+
|
17
|
+
describe '#schedule' do
|
18
|
+
let(:job) { When::Job.new(klass: Object, args: ['arg1', 'arg2'], worker_args: { 'some' => 'args' }) }
|
19
|
+
|
20
|
+
context 'scheduling a valid cron' do
|
21
|
+
it 'adds data to the schedules hash in redis' do
|
22
|
+
job.schedule('test_schedule', '* * * * *')
|
23
|
+
expect(redis.hget(When.schedule_key, 'test_schedule')).to eq "{\"some\":\"args\",\"class\":\"Object\",\"cron\":\"* * * * *\",\"args\":[\"arg1\",\"arg2\"]}"
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
context 'scheduling an invalid cron' do
|
28
|
+
it 'raises a When::InvalidCron error' do
|
29
|
+
expect {
|
30
|
+
job.schedule('test_schedule', '0 0 0 0 0')
|
31
|
+
}.to raise_error When::InvalidCron
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
describe '#enqueue_at' do
|
37
|
+
let(:now) { Time.now }
|
38
|
+
let(:args) { ['arg1', 'arg2', 3, {'more' => 'args'} ] }
|
39
|
+
let(:klass) { String }
|
40
|
+
let(:job) { When::Job.new(klass: klass, args: args, worker_args: { 'some' => 'args' }) }
|
41
|
+
|
42
|
+
it 'adds an item to the delayed list' do
|
43
|
+
expect { job.enqueue_at(now) }
|
44
|
+
.to change { redis.zrange(When.delayed_queue_key, 0, -1).count }
|
45
|
+
.from(0).to(1)
|
46
|
+
end
|
47
|
+
|
48
|
+
it 'adds the correct score' do
|
49
|
+
job.enqueue_at(now)
|
50
|
+
score = redis.zrange(When.delayed_queue_key, 0, -1, with_scores: true).first.last
|
51
|
+
expect(score).to eq now.to_i.to_f
|
52
|
+
end
|
53
|
+
|
54
|
+
it 'adds the correct args' do
|
55
|
+
job.enqueue_at(now)
|
56
|
+
new_args = JSON.parse(redis.zrange(When.delayed_queue_key, 0, -1).first)['args']
|
57
|
+
expect(new_args).to eq args
|
58
|
+
end
|
59
|
+
|
60
|
+
it 'adds the correct class' do
|
61
|
+
job.enqueue_at(now)
|
62
|
+
new_args = JSON.parse(redis.zrange(When.delayed_queue_key, 0, -1).first)['class']
|
63
|
+
expect(new_args).to eq klass.name
|
64
|
+
end
|
65
|
+
|
66
|
+
it 'adds worker args' do
|
67
|
+
job.enqueue_at(now)
|
68
|
+
job = JSON.parse(redis.zrange(When.delayed_queue_key, 0, -1).first)
|
69
|
+
expect(job['some']).to eq 'args'
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
describe '#enqueue' do
|
74
|
+
let(:args) { ['arg1', 'arg2', 3, {'more' => 'args'} ] }
|
75
|
+
let(:klass) { String }
|
76
|
+
let(:job) { When::Job.new(klass: klass, args: args, worker_args: { 'some' => 'args' }) }
|
77
|
+
|
78
|
+
it 'adds an item to the worker queue' do
|
79
|
+
expect { job.enqueue }
|
80
|
+
.to change { redis.llen(When.worker_queue_key) }
|
81
|
+
.from(0).to(1)
|
82
|
+
end
|
83
|
+
|
84
|
+
it 'adds the correct args' do
|
85
|
+
job.enqueue
|
86
|
+
enqueued_args = JSON.parse(redis.rpop(When.worker_queue_key))['args']
|
87
|
+
expect(enqueued_args).to eq args
|
88
|
+
end
|
89
|
+
|
90
|
+
it 'adds the correct class' do
|
91
|
+
job.enqueue
|
92
|
+
enqueued_class = JSON.parse(redis.rpop(When.worker_queue_key))['class']
|
93
|
+
expect(enqueued_class).to eq klass.name
|
94
|
+
end
|
95
|
+
|
96
|
+
it 'adds worker args' do
|
97
|
+
job.enqueue
|
98
|
+
job = JSON.parse(redis.rpop(When.worker_queue_key))
|
99
|
+
expect(job['some']).to eq 'args'
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
data/spec/lib/when-do_spec.rb
CHANGED
@@ -17,18 +17,26 @@ describe When do
|
|
17
17
|
describe '#schedule' do
|
18
18
|
context 'scheduling a valid cron' do
|
19
19
|
it 'adds data to the schedules hash in redis' do
|
20
|
-
When.schedule('test_schedule', '* * * * *', Object, 'arg1', 'arg2')
|
21
|
-
expect(redis.hget(When.schedule_key, 'test_schedule')).to eq "{\"class\":\"Object\",\"cron\":\"* * * * *\",\"args\":[\"arg1\",\"arg2\"]}"
|
20
|
+
When.schedule('test_schedule', '* * * * *', Object, args: ['arg1', 'arg2'], worker_args: { 'some' => 'args' })
|
21
|
+
expect(redis.hget(When.schedule_key, 'test_schedule')).to eq "{\"some\":\"args\",\"class\":\"Object\",\"cron\":\"* * * * *\",\"args\":[\"arg1\",\"arg2\"]}"
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
25
|
context 'scheduling an invalid cron' do
|
26
26
|
it 'raises a When::InvalidCron error' do
|
27
27
|
expect {
|
28
|
-
When.schedule('test_schedule', '0 0 0 0 0', Object, 'arg1', 'arg2')
|
28
|
+
When.schedule('test_schedule', '0 0 0 0 0', Object, args: ['arg1', 'arg2'])
|
29
29
|
}.to raise_error When::InvalidCron
|
30
30
|
end
|
31
31
|
end
|
32
|
+
|
33
|
+
context 'scheduling invalid args' do
|
34
|
+
it 'raises a When::InvalidArgs error' do
|
35
|
+
expect {
|
36
|
+
When.schedule('test_schedule', '* * * * *', Object, args: {not_an: 'array'})
|
37
|
+
}.to raise_error When::InvalidArgs
|
38
|
+
end
|
39
|
+
end
|
32
40
|
end
|
33
41
|
|
34
42
|
describe '.valid_cron?' do
|
@@ -44,6 +52,7 @@ describe When do
|
|
44
52
|
end
|
45
53
|
end
|
46
54
|
end
|
55
|
+
|
47
56
|
describe '#unschedule' do
|
48
57
|
it 'removes data from the schedules hash in redis' do
|
49
58
|
When.schedule('test_schedule', '* * * * *', Object)
|
@@ -71,16 +80,30 @@ describe When do
|
|
71
80
|
end
|
72
81
|
|
73
82
|
it 'adds the correct args' do
|
74
|
-
When.enqueue_at(now, klass,
|
83
|
+
When.enqueue_at(now, klass, args: args)
|
75
84
|
new_args = JSON.parse(redis.zrange(When.delayed_queue_key, 0, -1).first)['args']
|
76
85
|
expect(new_args).to eq args
|
77
86
|
end
|
78
87
|
|
79
88
|
it 'adds the correct class' do
|
80
|
-
When.enqueue_at(now, klass,
|
89
|
+
When.enqueue_at(now, klass, args: args)
|
81
90
|
new_args = JSON.parse(redis.zrange(When.delayed_queue_key, 0, -1).first)['class']
|
82
91
|
expect(new_args).to eq klass.name
|
83
92
|
end
|
93
|
+
|
94
|
+
it 'adds worker args' do
|
95
|
+
When.enqueue_at(now, klass, worker_args: { these_are: 'some_args' })
|
96
|
+
job = JSON.parse(redis.zrange(When.delayed_queue_key, 0, -1).first)
|
97
|
+
expect(job['these_are']).to eq 'some_args'
|
98
|
+
end
|
99
|
+
|
100
|
+
context 'enqueueing invalid args' do
|
101
|
+
it 'raises a When::InvalidArgs error' do
|
102
|
+
expect {
|
103
|
+
When.enqueue_at(now, Object, args: {not_an: 'array'})
|
104
|
+
}.to raise_error When::InvalidArgs
|
105
|
+
end
|
106
|
+
end
|
84
107
|
end
|
85
108
|
|
86
109
|
describe '#enqueue' do
|
@@ -94,7 +117,7 @@ describe When do
|
|
94
117
|
end
|
95
118
|
|
96
119
|
it 'adds the correct args' do
|
97
|
-
When.enqueue(klass,
|
120
|
+
When.enqueue(klass, args: args)
|
98
121
|
enqueued_args = JSON.parse(redis.rpop(When.worker_queue_key))['args']
|
99
122
|
expect(enqueued_args).to eq args
|
100
123
|
end
|
@@ -104,5 +127,19 @@ describe When do
|
|
104
127
|
enqueued_class = JSON.parse(redis.rpop(When.worker_queue_key))['class']
|
105
128
|
expect(enqueued_class).to eq klass.name
|
106
129
|
end
|
130
|
+
|
131
|
+
it 'adds worker args' do
|
132
|
+
When.enqueue(klass, worker_args: { some: 'args' })
|
133
|
+
job = JSON.parse(redis.rpop(When.worker_queue_key))
|
134
|
+
expect(job['some']).to eq 'args'
|
135
|
+
end
|
136
|
+
|
137
|
+
context 'enqueueing invalid args' do
|
138
|
+
it 'raises a When::InvalidArgs error' do
|
139
|
+
expect {
|
140
|
+
When.enqueue(Object, args: {not_an: 'array'})
|
141
|
+
}.to raise_error When::InvalidArgs
|
142
|
+
end
|
143
|
+
end
|
107
144
|
end
|
108
145
|
end
|
data/when-do.gemspec
CHANGED
@@ -1,15 +1,16 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
lib = File.expand_path('../lib', __FILE__)
|
3
3
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'when-do/version'
|
4
5
|
|
5
6
|
Gem::Specification.new do |spec|
|
6
7
|
spec.name = "when-do"
|
7
|
-
spec.version =
|
8
|
+
spec.version = When::VERSION
|
8
9
|
spec.authors = ["TH"]
|
9
10
|
spec.email = ["tylerhartland7@gmail.com"]
|
10
11
|
spec.description = %q{Queues jobs when you want.}
|
11
|
-
spec.summary = %q{
|
12
|
-
spec.homepage = ""
|
12
|
+
spec.summary = %q{A very basic scheduler that can integrate with Sidekiq or Resque.}
|
13
|
+
spec.homepage = "https://github.com/th7/when-do"
|
13
14
|
spec.license = "MIT"
|
14
15
|
|
15
16
|
spec.files = `git ls-files`.split($/)
|
@@ -17,14 +18,14 @@ Gem::Specification.new do |spec|
|
|
17
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
18
19
|
spec.require_paths = ["lib"]
|
19
20
|
|
20
|
-
spec.add_runtime_dependency 'when-cron', '~> 1.0
|
21
|
-
spec.add_runtime_dependency 'redis'
|
22
|
-
spec.add_runtime_dependency 'json'
|
21
|
+
spec.add_runtime_dependency 'when-cron', '~> 1.0'
|
22
|
+
spec.add_runtime_dependency 'redis', '~> 3.0'
|
23
|
+
spec.add_runtime_dependency 'json', '~> 1.8'
|
23
24
|
|
24
25
|
spec.add_development_dependency "bundler", "~> 1.3"
|
25
|
-
spec.add_development_dependency "rake"
|
26
|
-
spec.add_development_dependency "guard"
|
27
|
-
spec.add_development_dependency "rspec"
|
28
|
-
spec.add_development_dependency "guard-rspec"
|
29
|
-
spec.add_development_dependency "pry"
|
26
|
+
spec.add_development_dependency "rake", '~> 10.4'
|
27
|
+
spec.add_development_dependency "guard", '~> 2.1'
|
28
|
+
spec.add_development_dependency "rspec", '~> 3.1'
|
29
|
+
spec.add_development_dependency "guard-rspec", '~> 4.3'
|
30
|
+
spec.add_development_dependency "pry", '~> 0.10'
|
30
31
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: when-do
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- TH
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-01-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: when-cron
|
@@ -16,42 +16,42 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 1.0
|
19
|
+
version: '1.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: 1.0
|
26
|
+
version: '1.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: redis
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '0'
|
33
|
+
version: '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
|
-
version: '0'
|
40
|
+
version: '3.0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: json
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
47
|
+
version: '1.8'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
54
|
+
version: '1.8'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: bundler
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -70,72 +70,72 @@ dependencies:
|
|
70
70
|
name: rake
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- - "
|
73
|
+
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: '
|
75
|
+
version: '10.4'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- - "
|
80
|
+
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: '
|
82
|
+
version: '10.4'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: guard
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- - "
|
87
|
+
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: '
|
89
|
+
version: '2.1'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- - "
|
94
|
+
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version: '
|
96
|
+
version: '2.1'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: rspec
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
|
-
- - "
|
101
|
+
- - "~>"
|
102
102
|
- !ruby/object:Gem::Version
|
103
|
-
version: '
|
103
|
+
version: '3.1'
|
104
104
|
type: :development
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
|
-
- - "
|
108
|
+
- - "~>"
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version: '
|
110
|
+
version: '3.1'
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
112
|
name: guard-rspec
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
|
-
- - "
|
115
|
+
- - "~>"
|
116
116
|
- !ruby/object:Gem::Version
|
117
|
-
version: '
|
117
|
+
version: '4.3'
|
118
118
|
type: :development
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
|
-
- - "
|
122
|
+
- - "~>"
|
123
123
|
- !ruby/object:Gem::Version
|
124
|
-
version: '
|
124
|
+
version: '4.3'
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
126
|
name: pry
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
128
128
|
requirements:
|
129
|
-
- - "
|
129
|
+
- - "~>"
|
130
130
|
- !ruby/object:Gem::Version
|
131
|
-
version: '0'
|
131
|
+
version: '0.10'
|
132
132
|
type: :development
|
133
133
|
prerelease: false
|
134
134
|
version_requirements: !ruby/object:Gem::Requirement
|
135
135
|
requirements:
|
136
|
-
- - "
|
136
|
+
- - "~>"
|
137
137
|
- !ruby/object:Gem::Version
|
138
|
-
version: '0'
|
138
|
+
version: '0.10'
|
139
139
|
description: Queues jobs when you want.
|
140
140
|
email:
|
141
141
|
- tylerhartland7@gmail.com
|
@@ -156,12 +156,15 @@ files:
|
|
156
156
|
- lib/when-do.rb
|
157
157
|
- lib/when-do/cli.rb
|
158
158
|
- lib/when-do/do.rb
|
159
|
+
- lib/when-do/job.rb
|
160
|
+
- lib/when-do/version.rb
|
159
161
|
- spec/lib/when-do/cli_spec.rb
|
160
162
|
- spec/lib/when-do/do_spec.rb
|
163
|
+
- spec/lib/when-do/job_spec.rb
|
161
164
|
- spec/lib/when-do_spec.rb
|
162
165
|
- spec/spec_helper.rb
|
163
166
|
- when-do.gemspec
|
164
|
-
homepage:
|
167
|
+
homepage: https://github.com/th7/when-do
|
165
168
|
licenses:
|
166
169
|
- MIT
|
167
170
|
metadata: {}
|
@@ -181,12 +184,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
181
184
|
version: '0'
|
182
185
|
requirements: []
|
183
186
|
rubyforge_project:
|
184
|
-
rubygems_version: 2.
|
187
|
+
rubygems_version: 2.4.2
|
185
188
|
signing_key:
|
186
189
|
specification_version: 4
|
187
|
-
summary:
|
190
|
+
summary: A very basic scheduler that can integrate with Sidekiq or Resque.
|
188
191
|
test_files:
|
189
192
|
- spec/lib/when-do/cli_spec.rb
|
190
193
|
- spec/lib/when-do/do_spec.rb
|
194
|
+
- spec/lib/when-do/job_spec.rb
|
191
195
|
- spec/lib/when-do_spec.rb
|
192
196
|
- spec/spec_helper.rb
|