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 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