delayed_cron 0.2.10 → 0.2.11

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: d7a2942e092055795c248a6eb82433c760c26733
4
- data.tar.gz: 195e7f6a46052e687611a825afede8ab3d4ef4f5
3
+ metadata.gz: 98459d8cfb19c18cd7d11fdfa6fd11743dc248cd
4
+ data.tar.gz: dbd9446e7fcd0f71c98404a4437540b3fdcd225f
5
5
  SHA512:
6
- metadata.gz: 596b466d8708c44a8023995a0df0ff7c6fa87b2c74b1d2e42521f5671e6d1b41147525fde9e1bdaecfc981978efcadcbf503a01e49d3fc4f1243765586d60f6a
7
- data.tar.gz: f2c640b98de5f67f384a54b7c493715b4b14a1a7024ad52c903bb103fc004810a1de8c33c1f259df4efb4ca571774de81d89a3ba15832022a68539c30d5e8fd2
6
+ metadata.gz: 0b6f2a9a47a0a671a42e2aae7e48929e0a5796949ccbeae7f49ef1d3326dabefe31870ab6e0c263bf355039b1ac4e3763f720ea3591520074807868c920659fb
7
+ data.tar.gz: 4bbbf3aa5d91f639edd427a66ccf8620c8c3620a8c13a03f902f6a660d8338de6648b222ed4ee42c2f7a7f1276493d2d81b73cb38571a908ff7edcfc0d4ebd0b
data/CHANGES.md CHANGED
@@ -1,3 +1,17 @@
1
+ # 0.2.11
2
+
3
+ - Use ActiveSupport::Duration to apply time offsets
4
+
5
+ Using seconds to apply the time offsets when the parsed time is in the
6
+ past is not time zone aware. This causes issues when DST begins/ends
7
+ between the two times. For example, daily jobs are scheduled an hour
8
+ earlier than the are supposed to when DST ends since it doesn't take the
9
+ extra hour into account. This causes further issues when calculating the
10
+ next offset time, the offset to prevent scheduling past times doesn't
11
+ apply as expected and the job is scheduled over and over. As a related
12
+ issue, we sometimes need a two hour jump to bring the parsed time to the
13
+ future, add a while loop to handle this case.
14
+
1
15
  # 0.2.10
2
16
 
3
17
  - Add ability to set a job time zone and also allow running a job at a specific minute of each hour.
@@ -22,6 +22,7 @@ Gem::Specification.new do |s|
22
22
  s.add_development_dependency "simplecov"
23
23
  s.add_development_dependency "codeclimate-test-reporter", "~> 1.0.0"
24
24
  s.add_development_dependency "hashie"
25
+ s.add_development_dependency "pry-byebug"
25
26
 
26
27
  s.files = `git ls-files`.split("\n")
27
28
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
@@ -1,3 +1,4 @@
1
+ require 'active_support/all'
1
2
  require 'delayed_cron/jobs'
2
3
  require 'delayed_cron/scheduling'
3
4
  require 'delayed_cron/railtie'
@@ -38,15 +38,15 @@ module DelayedCron
38
38
  zone = Time.find_zone!(zone_name)
39
39
 
40
40
  if hourly?
41
- period_in_seconds = 60 * 60
41
+ period_duration = 1.hour
42
42
  scheduled_time_string = "%H:#{scheduled_time_string}"
43
43
  else
44
- period_in_seconds = 60 * 60 * 24
44
+ period_duration = 1.day
45
45
  end
46
46
 
47
47
  scheduled_time = zone.now.strftime("%Y-%m-%d #{scheduled_time_string}")
48
48
  scheduled_time = zone.parse(scheduled_time)
49
- scheduled_time += period_in_seconds if zone.now >= scheduled_time
49
+ scheduled_time += period_duration while zone.now >= scheduled_time
50
50
  scheduled_time.to_i - zone.now.to_i
51
51
  end
52
52
 
@@ -1,3 +1,3 @@
1
1
  module DelayedCron
2
- VERSION = "0.2.10"
2
+ VERSION = "0.2.11"
3
3
  end
@@ -76,8 +76,11 @@ module DelayedCron
76
76
  let(:next_occurrence) do
77
77
  job.send(:convert_time_string_to_seconds_interval, scheduled_time, "Eastern Time (US & Canada)")
78
78
  end
79
+ let(:zone) { Time.find_zone!("Eastern Time (US & Canada)") }
80
+
79
81
  # Set Time.now to January 1, 2014 12:00:00 PM
80
82
  before { Timecop.freeze(Time.utc(2014, 1, 1, 12, 0, 0)) }
83
+
81
84
  context "next occurrence is today" do
82
85
  let(:known_interval) { 21600 }
83
86
  let(:scheduled_time) { "13:00:00 -0500" }
@@ -132,6 +135,35 @@ module DelayedCron
132
135
 
133
136
  expect(next_occurrence).to be(known_interval)
134
137
  end
138
+
139
+ it 'handles DST end' do
140
+ time = zone.local(2017, 11, 5, 1, 0) + 1.hour # ST start
141
+ Timecop.freeze(time)
142
+
143
+ expect(next_occurrence).to eq(1.hour.to_i)
144
+ end
145
+ end
146
+
147
+ context 'DST ends before next time' do
148
+ let(:scheduled_time) { "00:05:00" }
149
+
150
+ it 'adds an extra hour to the offset' do
151
+ time = zone.local(2017, 11, 5, 0, 5)
152
+ Timecop.freeze(time)
153
+
154
+ expect(next_occurrence).to eq(25.hours.to_i)
155
+ end
156
+ end
157
+
158
+ context 'calculation is on day of DST end' do
159
+ let(:scheduled_time) { "00:05:00" }
160
+
161
+ it 'still calculates correct offset' do
162
+ time = zone.local(2017, 11, 5, 23, 5)
163
+ Timecop.freeze(time)
164
+
165
+ expect(next_occurrence).to eq(1.hour.to_i)
166
+ end
135
167
  end
136
168
 
137
169
  end
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.10
4
+ version: 0.2.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Justin Grubbs
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-06-21 00:00:00.000000000 Z
11
+ date: 2017-11-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: delayed_job
@@ -164,6 +164,20 @@ dependencies:
164
164
  - - ">="
165
165
  - !ruby/object:Gem::Version
166
166
  version: '0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: pry-byebug
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
167
181
  description: Run your cron jobs with sidekiq, delayed_job, resque, or sucker_punch.
168
182
  email: justin@sellect.com
169
183
  executables: []