class Cronline::Simulator
Public Class Methods
builder()
click to toggle source
# File lib/cronline/simulator.rb, line 65 def self.builder Builder.new end
default_max_ticks()
click to toggle source
# File lib/cronline/simulator.rb, line 4 def self.default_max_ticks 1e+5 end
default_max_time_output()
click to toggle source
# File lib/cronline/simulator.rb, line 8 def self.default_max_time_output 365 end
default_timeframe_seconds()
click to toggle source
# File lib/cronline/simulator.rb, line 12 def self.default_timeframe_seconds 12.month.to_i end
new( timezone = nil, start_time = Time.new, end_time = start_time + Simulator.default_timeframe_seconds, max_ticks = Simulator.default_max_ticks, max_time_output = Simulator.default_max_time_output)
click to toggle source
# File lib/cronline/simulator.rb, line 69 def initialize( timezone = nil, start_time = Time.new, end_time = start_time + Simulator.default_timeframe_seconds, max_ticks = Simulator.default_max_ticks, max_time_output = Simulator.default_max_time_output) @start_time = start_time @end_time = end_time @max_ticks = max_ticks @max_time_output = max_time_output @timezone = timezone end
Public Instance Methods
aligned_start_time(start_time)
click to toggle source
# File lib/cronline/simulator.rb, line 127 def aligned_start_time(start_time) #Align to day since minutes / seconds are relatively deterministic across timezones and DST... Time.new(start_time.year, start_time.month, start_time.day, start_time.hour).to_i end
generate_hours_and_seconds(cron, time)
click to toggle source
# File lib/cronline/simulator.rb, line 107 def generate_hours_and_seconds(cron, time) accumulator = [] cron.minutes.range.each do |minute| cron.seconds.range.each do |second| @tick += 1 accumulator.push(Time.new(time.year, time.month, time.day, time.hour, minute, second)) end end accumulator end
simulate_cron(cron_expression, timezone = nil)
click to toggle source
# File lib/cronline/simulator.rb, line 82 def simulate_cron(cron_expression, timezone = nil) merged_timezone = timezone.nil? ? @timezone : timezone @time_accumulator = [] cron = Cron.new(cron_expression) time_increment = time_increment_size @start_unix_time = aligned_start_time(@start_time) @end_unix_time = @end_time.to_time.to_i @tick = 0 while @start_unix_time <= @end_unix_time do if stop_simulation break end if merged_timezone.nil? time = Time.at(@start_unix_time) else time = Time.at(@start_unix_time).in_time_zone(merged_timezone) end if cron.test_up_to_hours?(time) @time_accumulator += generate_hours_and_seconds(cron, time) end @start_unix_time += time_increment end @time_accumulator end
stop_simulation()
click to toggle source
# File lib/cronline/simulator.rb, line 118 def stop_simulation if @tick >= @max_ticks return true end if @time_accumulator.size >= @max_time_output return true end end
time_increment_size()
click to toggle source
# File lib/cronline/simulator.rb, line 132 def time_increment_size #Skip seconds and minutes since we will generate these 1.hours.to_i end