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