diff --git a/lib/perfectsched.rb b/lib/perfectsched.rb index 441349c..aa00e43 100644 --- a/lib/perfectsched.rb +++ b/lib/perfectsched.rb @@ -52,7 +52,7 @@ module PerfectSched require File.expand_path(v, File.dirname(__FILE__)) } - require 'cron-spec' + require 'chrono' require 'tzinfo' def self.open(config, &block) @@ -71,28 +71,9 @@ def self.open(config, &block) end def self.cron_time(cron, timestamp, timezone) - begin - tab = CronSpec::CronSpecification.new(cron) - rescue - raise ArgumentError, "invalid cron format: #{$!}: #{cron.inspect}" - end - - begin - tz = TZInfo::Timezone.get(timezone) if timezone - rescue - raise ArgumentError, "unknown timezone: #{$!}: #{timezone.inspect}" - end - - ts = (timestamp + 59) / 60 * 60 - while true - t = Time.at(ts).utc - t = tz.utc_to_local(t) if tz - if tab.is_specification_in_effect?(t) - return ts - end - ts += 60 - # FIXME break - end + ts = timestamp - 1 # compatibility + t = Time.find_zone!(timezone || 'UTC'.freeze).at(ts) + Chrono::NextTime.new(now: t, source: cron).to_time.to_i end def self.next_time(cron, before_timestamp, timezone) diff --git a/perfectsched.gemspec b/perfectsched.gemspec index 86f89ac..5de3951 100644 --- a/perfectsched.gemspec +++ b/perfectsched.gemspec @@ -16,7 +16,7 @@ Gem::Specification.new do |gem| gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) } gem.require_paths = ['lib'] - gem.add_dependency "cron-spec", [">= 0.1.2", "<= 0.1.2"] + gem.add_dependency "chrono", "~> 0.2.0" gem.add_dependency "sequel", "~> 3.48.0" gem.add_dependency "tzinfo", "~> 1.1" gem.add_dependency "perfectqueue", "~> 0.8.41" diff --git a/spec/schedule_collection_spec.rb b/spec/schedule_collection_spec.rb index 76dbcb0..34c0aed 100644 --- a/spec/schedule_collection_spec.rb +++ b/spec/schedule_collection_spec.rb @@ -110,11 +110,11 @@ it 'invalid cron format' do expect { sc.add('sched01', 't01', :cron=>'???') - }.to raise_error ArgumentError + }.to raise_error StandardError expect { sc.add('sched01', 't01', :cron=>'* * * * * *') - }.to raise_error ArgumentError + }.to raise_error StandardError end it 'fail duplicated add' do