From 55e3956618f80334aa6bded6291b97b440a8f468 Mon Sep 17 00:00:00 2001 From: Dzmitry Plashchynski Date: Sun, 12 Apr 2015 16:34:28 +0300 Subject: [PATCH 1/5] Clean up --- lib/crono/cli.rb | 4 ++-- lib/crono/job.rb | 4 +--- spec/job_spec.rb | 13 ------------- 3 files changed, 3 insertions(+), 18 deletions(-) diff --git a/lib/crono/cli.rb b/lib/crono/cli.rb index 478c755..f10f545 100644 --- a/lib/crono/cli.rb +++ b/lib/crono/cli.rb @@ -62,7 +62,7 @@ module Crono logger.info 'Jobs:' Crono.scheduler.jobs.each do |job| logger.info "'#{job.performer}' with rule '#{job.period.description}'"\ - "next time will perform at #{job.next}" + " next time will perform at #{job.next}" end end @@ -80,7 +80,7 @@ module Crono end def start_working_loop - while true + loop do next_time, jobs = Crono.scheduler.next_jobs sleep(next_time - Time.now) jobs.each(&:perform) diff --git a/lib/crono/job.rb b/lib/crono/job.rb index 24a7922..276e373 100644 --- a/lib/crono/job.rb +++ b/lib/crono/job.rb @@ -60,9 +60,7 @@ module Crono end def perform_job - performer_instance = performer.new - performer_instance.instance_variable_set(:@_crono_job, self) - performer_instance.perform + performer.new.perform finished_time_sec = format('%.2f', Time.now - last_performed_at) rescue StandardError => e handle_job_fail(e, finished_time_sec) diff --git a/spec/job_spec.rb b/spec/job_spec.rb index 6eb8c45..029e50c 100644 --- a/spec/job_spec.rb +++ b/spec/job_spec.rb @@ -32,23 +32,10 @@ describe Crono::Job do expect(saved_log).to include 'Some error' end - xit 'should set Job#healthy to true if perform ok' do - class TestJob - def perform - @_crono_job - end - end - job.perform.join - end - it 'should set Job#healthy to false if perform with error' do failing_job.perform.join expect(failing_job.healthy).to be false end - - xit 'should set @_crono_job variable to instance' do - job.perform - end end describe '#description' do From f6b393ad6b3ab2c0e558b38f4959c0a0c03e84e6 Mon Sep 17 00:00:00 2001 From: Dzmitry Plashchynski Date: Sun, 12 Apr 2015 16:48:57 +0300 Subject: [PATCH 2/5] Period should only return future time --- lib/crono/period.rb | 6 ++++-- spec/period_spec.rb | 21 +++++++++++++-------- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/lib/crono/period.rb b/lib/crono/period.rb index 31a99f3..661cd88 100644 --- a/lib/crono/period.rb +++ b/lib/crono/period.rb @@ -1,5 +1,5 @@ module Crono - # Period describe frequency of performing a task + # Period describe frequency of jobs class Period DAYS = [:monday, :tuesday, :wednesday, :thursday, :friday, :saturday, :sunday] @@ -14,7 +14,9 @@ module Crono return initial_next unless since @next = @period.since(since) @next = @next.beginning_of_week.advance(days: @on) if @on - @next.change(time_atts) + @next = @next.change(time_atts) + return @next if @next.future? + Time.now end def description diff --git a/spec/period_spec.rb b/spec/period_spec.rb index bb7fa57..e396912 100644 --- a/spec/period_spec.rb +++ b/spec/period_spec.rb @@ -53,28 +53,33 @@ describe Crono::Period do end context 'in daily basis' do + it "should return Time.now if the next time in past" do + @period = Crono::Period.new(1.day, at: '06:00') + expect(@period.next(since: 2.days.ago)).to be_eql(Time.now) + end + it 'should return the time 2 days from now' do @period = Crono::Period.new(2.day) - expect(@period.next).to be_eql(2.day.from_now) + expect(@period.next).to be_eql(2.days.from_now) end it "should set time to 'at' time as a string" do time = 10.minutes.ago at = [time.hour, time.min].join(':') - @period = Crono::Period.new(2.day, at: at) - expect(@period.next).to be_eql(2.day.from_now.change(hour: time.hour, min: time.min)) + @period = Crono::Period.new(2.days, at: at) + expect(@period.next).to be_eql(2.days.from_now.change(hour: time.hour, min: time.min)) end it "should set time to 'at' time as a hash" do time = 10.minutes.ago at = { hour: time.hour, min: time.min } - @period = Crono::Period.new(2.day, at: at) - expect(@period.next).to be_eql(2.day.from_now.change(at)) + @period = Crono::Period.new(2.days, at: at) + expect(@period.next).to be_eql(2.days.from_now.change(at)) end it "should raise error when 'at' is wrong" do expect { - Crono::Period.new(2.day, at: 1) + Crono::Period.new(2.days, at: 1) }.to raise_error("Unknown 'at' format") end @@ -85,14 +90,14 @@ describe Crono::Period do end it 'should return time in relation to last time' do - @period = Crono::Period.new(2.day) + @period = Crono::Period.new(2.days) expect(@period.next(since: 1.day.ago)).to be_eql(1.day.from_now) end it 'should return today time if it is first run and not too late' do time = 10.minutes.from_now at = { hour: time.hour, min: time.min } - @period = Crono::Period.new(2.day, at: at) + @period = Crono::Period.new(2.days, at: at) expect(@period.next.utc.to_s).to be_eql(Time.now.change(at).utc.to_s) end end From e8812b13298a2ab91ecb4fdc19e9fddb22f8dafc Mon Sep 17 00:00:00 2001 From: Dzmitry Plashchynski Date: Sun, 12 Apr 2015 16:52:37 +0300 Subject: [PATCH 3/5] v0.8.6.pre --- Gemfile.lock | 4 ++-- lib/crono/version.rb | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 55c1ed9..07a3299 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,7 +1,7 @@ PATH remote: . specs: - crono (0.8.5.pre) + crono (0.8.6.pre) activejob (~> 4.0) activerecord (~> 4.0) activesupport (~> 4.0) @@ -31,7 +31,7 @@ GEM columnize (= 0.9.0) columnize (0.9.0) diff-lcs (1.2.5) - globalid (0.3.3) + globalid (0.3.5) activesupport (>= 4.1.0) haml (4.0.6) tilt diff --git a/lib/crono/version.rb b/lib/crono/version.rb index 17b35a1..5eb5f96 100644 --- a/lib/crono/version.rb +++ b/lib/crono/version.rb @@ -1,3 +1,3 @@ module Crono - VERSION = '0.8.5.pre' + VERSION = '0.8.6.pre' end From 84ac08e5d4ad2e22f120853636490ad6c83b667d Mon Sep 17 00:00:00 2001 From: Dzmitry Plashchynski Date: Sun, 12 Apr 2015 17:04:07 +0300 Subject: [PATCH 4/5] Fix error when next time in the past --- lib/crono/cli.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/crono/cli.rb b/lib/crono/cli.rb index f10f545..aa7eb98 100644 --- a/lib/crono/cli.rb +++ b/lib/crono/cli.rb @@ -82,7 +82,7 @@ module Crono def start_working_loop loop do next_time, jobs = Crono.scheduler.next_jobs - sleep(next_time - Time.now) + sleep(next_time - Time.now) if next_time > Time.now jobs.each(&:perform) end end From c8f9ff4e348a7d9da1af18acc7e3e19128111b41 Mon Sep 17 00:00:00 2001 From: Dzmitry Plashchynski Date: Sun, 12 Apr 2015 17:04:43 +0300 Subject: [PATCH 5/5] v0.8.7.pre --- Gemfile.lock | 2 +- lib/crono/version.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 07a3299..c2321e1 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,7 +1,7 @@ PATH remote: . specs: - crono (0.8.6.pre) + crono (0.8.7.pre) activejob (~> 4.0) activerecord (~> 4.0) activesupport (~> 4.0) diff --git a/lib/crono/version.rb b/lib/crono/version.rb index 5eb5f96..a191de3 100644 --- a/lib/crono/version.rb +++ b/lib/crono/version.rb @@ -1,3 +1,3 @@ module Crono - VERSION = '0.8.6.pre' + VERSION = '0.8.7.pre' end