delayed_cron 0.2.8 → 0.2.9

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: 794d097692d2a62b9afda86ab4ef063222346956
4
- data.tar.gz: 9ec982d8f66359e2c385cde299f4c152cd0ab934
3
+ metadata.gz: 5ff17f816e19f148c452438b48c45bbc1f9c30fc
4
+ data.tar.gz: 7fcc1e2435d54c239893f281a10fd0561ad5f11f
5
5
  SHA512:
6
- metadata.gz: 3bb6954c254ec218b44ac7266135ada9d2213c63f82bf346057bae07dd336ddb8737fe3777762757c720c616669d581992d6123823971e08c09bb2f58186facb
7
- data.tar.gz: f6982f58ca882e82d32ead011b243c9f3ea85dc67372b9c8ca166debe0d32aa3e79d7ceaa721ce525c750b7d890042dc524ce7ebdef298dbde5e4f3ce05b4b85
6
+ metadata.gz: 4356a31a22fb9713486ccc55d77998d0487c27424c6bfe68b8bfee2124e31d52c112fa883216546e4dd0b4db16c1a20159c06349e56471f6f851202cb4b36a47
7
+ data.tar.gz: d40f0c45bec851dc5e0985a50eee5b114ff409b137818377c80f822c7019a07f8da408fb54736fee6ce1763ce956191463c07b85734b51f6ba191234d1485bca
data/.gitignore CHANGED
@@ -1,3 +1,4 @@
1
1
  *.DS_Store
2
2
  pkg
3
3
  Gemfile.lock
4
+ coverage
data/.travis.yml CHANGED
@@ -1,6 +1,6 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 2.0.0
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
@@ -0,0 +1,3 @@
1
+ # 0.2.9
2
+
3
+ - fix scheduling
data/README.md CHANGED
@@ -10,7 +10,7 @@ run cron jobs with sidekiq, delayed_job, resque, or sucker_punch
10
10
  ### INSTALL
11
11
 
12
12
  ```ruby
13
- gem "delayed_cron", "~> 0.2.7"
13
+ gem "delayed_cron", "~> 0.2.9"
14
14
  ```
15
15
 
16
16
  ### USE IN MODEL
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 "codeclimate-test-reporter"
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
- schedule(klass, method_name, options)
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
- date = beginning_of_day(options[:interval].to_i)
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
@@ -1,3 +1,3 @@
1
1
  module DelayedCron
2
- VERSION = "0.2.8"
2
+ VERSION = "0.2.9"
3
3
  end
@@ -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
@@ -1,5 +1,5 @@
1
- require 'codeclimate-test-reporter'
2
- CodeClimate::TestReporter.start
1
+ require "simplecov"
2
+ SimpleCov.start
3
3
 
4
4
  require 'bundler/setup'
5
5
  Bundler.setup
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.8
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: 2016-09-27 00:00:00.000000000 Z
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: codeclimate-test-reporter
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