Class: Cronline::Simulator
- Inherits:
-
Object
- Object
- Cronline::Simulator
- Defined in:
- lib/cronline/simulator.rb
Defined Under Namespace
Classes: Builder
Class Method Summary collapse
- .builder ⇒ Object
- .default_max_ticks ⇒ Object
- .default_max_time_output ⇒ Object
- .default_timeframe_seconds ⇒ Object
Instance Method Summary collapse
- #aligned_start_time(start_time) ⇒ Object
- #generate_hours_and_seconds(cron, time) ⇒ Object
-
#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) ⇒ Simulator
constructor
A new instance of Simulator.
- #simulate_cron(cron_expression, timezone = nil) ⇒ Object
- #stop_simulation ⇒ Object
- #time_increment_size ⇒ Object
Constructor Details
#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) ⇒ Simulator
Returns a new instance of Simulator.
69 70 71 72 73 74 75 76 77 78 79 80 |
# 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 |
Class Method Details
.builder ⇒ Object
65 66 67 |
# File 'lib/cronline/simulator.rb', line 65 def self.builder Builder.new end |
.default_max_ticks ⇒ Object
4 5 6 |
# File 'lib/cronline/simulator.rb', line 4 def self.default_max_ticks 1e+5 end |
.default_max_time_output ⇒ Object
8 9 10 |
# File 'lib/cronline/simulator.rb', line 8 def self.default_max_time_output 365 end |
.default_timeframe_seconds ⇒ Object
12 13 14 |
# File 'lib/cronline/simulator.rb', line 12 def self.default_timeframe_seconds 12.month.to_i end |
Instance Method Details
#aligned_start_time(start_time) ⇒ Object
127 128 129 130 |
# 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) ⇒ Object
107 108 109 110 111 112 113 114 115 116 |
# 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) ⇒ Object
82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
# 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 ⇒ Object
118 119 120 121 122 123 124 125 |
# 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 ⇒ Object
132 133 134 135 |
# 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 |