Sha256: 013369ad6890368ca13e296b8648d1047f4e5a699c9cc9517d9abf8cf6cba62b
Contents?: true
Size: 1.76 KB
Versions: 3
Compression:
Stored size: 1.76 KB
Contents
require "active_support/core_ext/numeric/time" require "active_support/version" if ActiveSupport::VERSION::MAJOR >= 4 require "active_support/core_ext/date" require "active_support/core_ext/time" else require "active_support/core_ext/date/calculations" require "active_support/core_ext/time/calculations" end module Chrono class NextTime attr_reader :now, :source attr_writer :time def initialize(options) @now = options[:now] @source = options[:source] end def to_time loop do case when !scheduled_in_this_month? carry_month when !scheduled_in_this_day? carry_day when !scheduled_in_this_wday? carry_day when !scheduled_in_this_hour? carry_hour when !scheduled_in_this_minute? carry_minute else break time end end end private def time @time ||= (now + 1.minute).change(sec: 0) end def schedule @schedule ||= Schedule.new(source) end def scheduled_in_this_month? schedule.months.include?(time.month) end def scheduled_in_this_day? schedule.days.include?(time.day) end def scheduled_in_this_wday? schedule.wdays.include?(time.wday) end def scheduled_in_this_hour? schedule.hours.include?(time.hour) end def scheduled_in_this_minute? schedule.minutes.include?(time.min) end def carry_month self.time = time.next_month.at_beginning_of_month end def carry_day self.time = time.tomorrow.at_beginning_of_day end def carry_hour self.time = (time + 1.hour).at_beginning_of_hour end def carry_minute self.time = (time + 1.minute).change(sec: 0) end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
chrono-0.2.0 | lib/chrono/next_time.rb |
chrono-0.1.0 | lib/chrono/next_time.rb |
chrono-0.0.6 | lib/chrono/next_time.rb |