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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d7344050b98b79dee12e165ab840351ca4dd7ce9
4
- data.tar.gz: db99f14c49e9bea72e747fc8d8c92b1376e1b6e4
3
+ metadata.gz: d239b9c341f86627431530ca699c631c239eddb1
4
+ data.tar.gz: 5cdd7489b259bc86dfa76de4910c54df1c7b7e42
5
5
  SHA512:
6
- metadata.gz: 2b9a2ef9663eb74715e5d64fd195a418f039fb0d73538c9590088764d0335bb412a74e237d9ab616148fdf3beeeb90906820634d8945314b2b203e54001a712a
7
- data.tar.gz: 6b3504daa5753f736ba81218a770579f48b9643d708dde31842f4d87d2e87ebeb18d259cd992f207836260b5257cbfd9bd1fb307e5950dd70aa2ac5036665e38
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, more_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, more_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, more_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
- if cron == started_at
122
- jobs << { 'jid' => SecureRandom.uuid, 'class' => schedule['class'], 'args' => schedule['args'] }.to_json
123
- end
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
- delayed_jobs = redis.multi do
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
- end
147
- success = redis.lpush(worker_queue_key, jobs)
148
- unless success > 0
149
- raise "Failed to queue all jobs. Redis returned #{success}."
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
 
@@ -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
@@ -0,0 +1,3 @@
1
+ module When
2
+ VERSION = '2.0.0'
3
+ 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, *args)
19
+ def self.schedule(name, cron, klass, args: [], worker_args: {})
19
20
  raise InvalidCron, "\"#{cron}\" is invalid" unless valid_cron?(cron)
20
- schedule = {'class' => klass.to_s, 'cron' => cron, 'args' => args}
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, *args)
53
- job = { 'jid' => SecureRandom.uuid, 'class' => klass.to_s, 'args' => args }
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, *args)
65
- job = { 'jid' => SecureRandom.uuid, 'class' => klass.to_s, 'args' => args }
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
@@ -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 be_true
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 be_true
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 be_false
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, *args)
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 be_true
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, *args)
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 be_true
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
- it 'places jobs onto the work queue' do
145
- expect { when_do.enqueue(['junk', 'jobs']) }
146
- .to change { redis.llen(when_do.worker_queue_key) }
147
- .from(0)
148
- .to(2)
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
@@ -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, *args)
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, *args)
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, *args)
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 = '1.1.6'
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{Queues jobs when you want.}
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.2'
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: 1.1.6
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: 2014-08-29 00:00:00.000000000 Z
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.2
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.2
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: '0'
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: '0'
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: '0'
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: '0'
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: '0'
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: '0'
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: '0'
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: '0'
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: '0'
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: '0'
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.1.11
187
+ rubygems_version: 2.4.2
185
188
  signing_key:
186
189
  specification_version: 4
187
- summary: Queues jobs when you want.
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