delayed_cron 0.2.8 → 0.2.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.travis.yml +4 -1
- data/CHANGES.md +3 -0
- data/README.md +1 -1
- data/delayed_cron.gemspec +2 -1
- data/lib/delayed_cron.rb +2 -1
- data/lib/delayed_cron/scheduling.rb +9 -32
- data/lib/delayed_cron/version.rb +1 -1
- data/spec/scheduling_spec.rb +31 -21
- data/spec/spec_helper.rb +2 -2
- metadata +18 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5ff17f816e19f148c452438b48c45bbc1f9c30fc
|
4
|
+
data.tar.gz: 7fcc1e2435d54c239893f281a10fd0561ad5f11f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4356a31a22fb9713486ccc55d77998d0487c27424c6bfe68b8bfee2124e31d52c112fa883216546e4dd0b4db16c1a20159c06349e56471f6f851202cb4b36a47
|
7
|
+
data.tar.gz: d40f0c45bec851dc5e0985a50eee5b114ff409b137818377c80f822c7019a07f8da408fb54736fee6ce1763ce956191463c07b85734b51f6ba191234d1485bca
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
language: ruby
|
2
2
|
rvm:
|
3
|
-
- 2.
|
3
|
+
- 2.2.5
|
4
4
|
|
5
5
|
matrix:
|
6
6
|
allow_failures:
|
@@ -12,6 +12,9 @@ services:
|
|
12
12
|
script:
|
13
13
|
- bundle exec rake
|
14
14
|
|
15
|
+
before_script:
|
16
|
+
- export TZ=US/Eastern
|
17
|
+
|
15
18
|
addons:
|
16
19
|
code_climate:
|
17
20
|
repo_token: f0884115cadbe82b33756e38a9cd32d5129304746a17126d6c7da02e7a69910a
|
data/CHANGES.md
ADDED
data/README.md
CHANGED
data/delayed_cron.gemspec
CHANGED
@@ -19,7 +19,8 @@ Gem::Specification.new do |s|
|
|
19
19
|
s.add_development_dependency "rails"
|
20
20
|
s.add_development_dependency "timecop"
|
21
21
|
s.add_development_dependency "rspec-sidekiq"
|
22
|
-
s.add_development_dependency "
|
22
|
+
s.add_development_dependency "simplecov"
|
23
|
+
s.add_development_dependency "codeclimate-test-reporter", "~> 1.0.0"
|
23
24
|
s.add_development_dependency "hashie"
|
24
25
|
|
25
26
|
s.files = `git ls-files`.split("\n")
|
data/lib/delayed_cron.rb
CHANGED
@@ -40,7 +40,8 @@ module DelayedCron
|
|
40
40
|
def process_job(klass, method_name, options)
|
41
41
|
# TODO: add ability to send args to klass method
|
42
42
|
klass.constantize.send(method_name)
|
43
|
-
|
43
|
+
symbolized_options = options.collect{|k,v| [k.to_sym, v]}.to_h
|
44
|
+
schedule(klass, method_name, symbolized_options)
|
44
45
|
end
|
45
46
|
|
46
47
|
end
|
@@ -27,46 +27,23 @@ module DelayedCron
|
|
27
27
|
end
|
28
28
|
|
29
29
|
def add_interval(options)
|
30
|
-
|
31
|
-
options[:interval] = adjust_interval(date, options[:at])
|
30
|
+
options[:interval] = convert_time_string_to_seconds_interval(options[:at])
|
32
31
|
options
|
33
32
|
end
|
34
33
|
|
34
|
+
def convert_time_string_to_seconds_interval(scheduled_time_string)
|
35
|
+
day_in_seconds = 60 * 60 * 24
|
36
|
+
scheduled_time = Time.now.strftime("%Y-%m-%d #{scheduled_time_string}")
|
37
|
+
scheduled_time = DateTime.parse(scheduled_time, false).to_time
|
38
|
+
scheduled_time += day_in_seconds if Time.now >= scheduled_time
|
39
|
+
scheduled_time.to_i - Time.now.to_i
|
40
|
+
end
|
41
|
+
|
35
42
|
def timing_opts(interval, options_at)
|
36
43
|
timing_opts = { interval: interval }
|
37
44
|
timing_opts.merge!(at: options_at) if options_at.present?
|
38
45
|
timing_opts
|
39
46
|
end
|
40
47
|
|
41
|
-
def beginning_of_day(seconds)
|
42
|
-
(Time.now + seconds).beginning_of_day
|
43
|
-
end
|
44
|
-
|
45
|
-
def adjust_interval(date, time_string)
|
46
|
-
adjusted_date(date, time_string).to_i - Time.now.to_i
|
47
|
-
end
|
48
|
-
|
49
|
-
def adjusted_date(date, time_string)
|
50
|
-
time = parse_time(time_string.split(/:|\ /).map(&:to_i))
|
51
|
-
DateTime.civil(
|
52
|
-
date.year,
|
53
|
-
date.month,
|
54
|
-
date.day,
|
55
|
-
time[:hours],
|
56
|
-
time[:mins],
|
57
|
-
time[:secs],
|
58
|
-
Rational(time[:tz], 2400)
|
59
|
-
)
|
60
|
-
end
|
61
|
-
|
62
|
-
def parse_time(time_array)
|
63
|
-
{
|
64
|
-
hours: time_array[0],
|
65
|
-
mins: time_array[1],
|
66
|
-
secs: time_array[2] || 0,
|
67
|
-
tz: time_array[3] || Time.now.strftime("%z").to_i
|
68
|
-
}
|
69
|
-
end
|
70
|
-
|
71
48
|
end
|
72
49
|
end
|
data/lib/delayed_cron/version.rb
CHANGED
data/spec/scheduling_spec.rb
CHANGED
@@ -35,6 +35,37 @@ describe DelayedCron::Scheduling do
|
|
35
35
|
end
|
36
36
|
end
|
37
37
|
|
38
|
+
describe ".add_interval" do
|
39
|
+
it 'adds an interval key and value to the options hash' do
|
40
|
+
options = DelayedCron.add_interval(at: '12:00:00 -0500')
|
41
|
+
expect(options).to include(:interval)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
describe ".convert_time_string_to_seconds_interval" do
|
46
|
+
let(:next_occurrence) do
|
47
|
+
DelayedCron.convert_time_string_to_seconds_interval(scheduled_time)
|
48
|
+
end
|
49
|
+
# Set Time.now to January 1, 2014 12:00:00 PM
|
50
|
+
before { Timecop.freeze(Time.local(2014, 1, 1, 12, 0, 0)) }
|
51
|
+
context "next occurrence is today" do
|
52
|
+
let(:known_interval) { 3600 }
|
53
|
+
let(:scheduled_time) { "13:00:00 -0500" }
|
54
|
+
it "converts a time string to seconds" do
|
55
|
+
expect(next_occurrence).to be(known_interval)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
context "next occurrence is tomorrow" do
|
60
|
+
let(:known_interval) { 82800 }
|
61
|
+
let(:scheduled_time) { "11:00:00 -0500" }
|
62
|
+
it "converts a time string to seconds" do
|
63
|
+
expect(next_occurrence).to be(known_interval)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
68
|
+
|
38
69
|
describe ".timing_opts" do
|
39
70
|
|
40
71
|
let(:options) do
|
@@ -49,25 +80,4 @@ describe DelayedCron::Scheduling do
|
|
49
80
|
end
|
50
81
|
end
|
51
82
|
|
52
|
-
describe ".beginning_of_day" do
|
53
|
-
it "returns the beginning of the day for the interval" do
|
54
|
-
seconds = 2.days.to_i
|
55
|
-
beginning_of_day_2_days_from_now = DelayedCron.beginning_of_day(seconds)
|
56
|
-
expect(beginning_of_day_2_days_from_now).to be < 2.days.from_now
|
57
|
-
expect(beginning_of_day_2_days_from_now).to be > 1.day.from_now
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
describe ".adjust_interval" do
|
62
|
-
it "adjusts the interval based on the :at option" do
|
63
|
-
# Set Time.now to January 1, 2014 12:00:00 PM
|
64
|
-
Timecop.freeze(Time.local(2014, 1, 1, 12, 0, 0))
|
65
|
-
interval = 9.days
|
66
|
-
adjusted_interval = interval - 12.hours
|
67
|
-
expect(DelayedCron.processor).to receive(:enqueue_delayed_cron)
|
68
|
-
.with("SomeClass", "long_method", { interval: adjusted_interval.to_i, at: "00:00" })
|
69
|
-
DelayedCron.schedule("SomeClass", "long_method", { interval: interval, at: "00:00" })
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
83
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: delayed_cron
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Justin Grubbs
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-01-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: delayed_job
|
@@ -123,7 +123,7 @@ dependencies:
|
|
123
123
|
- !ruby/object:Gem::Version
|
124
124
|
version: '0'
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
|
-
name:
|
126
|
+
name: simplecov
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
128
128
|
requirements:
|
129
129
|
- - ">="
|
@@ -136,6 +136,20 @@ dependencies:
|
|
136
136
|
- - ">="
|
137
137
|
- !ruby/object:Gem::Version
|
138
138
|
version: '0'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: codeclimate-test-reporter
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - "~>"
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: 1.0.0
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - "~>"
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: 1.0.0
|
139
153
|
- !ruby/object:Gem::Dependency
|
140
154
|
name: hashie
|
141
155
|
requirement: !ruby/object:Gem::Requirement
|
@@ -160,6 +174,7 @@ files:
|
|
160
174
|
- ".rspec"
|
161
175
|
- ".ruby-version"
|
162
176
|
- ".travis.yml"
|
177
|
+
- CHANGES.md
|
163
178
|
- Gemfile
|
164
179
|
- README.md
|
165
180
|
- Rakefile
|