class Portal::Timeline
@api private @since 0.1.0
Attributes
internal_time[R]
@return [Time]
@api private @since 0.1.0
lock[R]
@return [Sidekiq::Portal::Lock]
@api private @since 0.1.0
time_plan[R]
@return [Fugit::Duration, Fugit::Cron]
@api private @since 0.1.0
timezoner[R]
@return [ActiveSupport::TimeZone]
@api private @since 0.1.0
Public Class Methods
new(initial_time, timezoner, time_plan)
click to toggle source
@param initial_time [Time] @param timezoner [ActiveSupport::TimeZone] @param time_plan
[Fugit::Duration, Fugit::Cron] @return [void]
@api private @since 0.1.0
# File lib/portal/timeline.rb, line 15 def initialize(initial_time, timezoner, time_plan) @timezoner = timezoner @time_plan = time_plan @internal_time = initial_time @lock = Sidekiq::Portal::Lock.new end
Public Instance Methods
actualize_time!()
click to toggle source
@return [void]
@api private @since 0.1.0
# File lib/portal/timeline.rb, line 26 def actualize_time! @internal_time = next_time_point end
current_time_point()
click to toggle source
@return [Time]
@api private @since 0.1.0
# File lib/portal/timeline.rb, line 34 def current_time_point thread_safe { timezoner.at(internal_time) } end
next_time_point()
click to toggle source
@return [Time]
@api private @since 0.1.0
# File lib/portal/timeline.rb, line 42 def next_time_point thread_safe { timezoner.at(time_plan.next_time(current_time_point).seconds) } end
time_has_come?()
click to toggle source
@return [Boolean]
@api private @since 0.1.0
# File lib/portal/timeline.rb, line 71 def time_has_come? thread_safe { global_time_point >= next_time_point } end
time_points()
click to toggle source
@param target_time [Time] @return [Array<Time>]
@api private @since 0.1.0
# File lib/portal/timeline.rb, line 51 def time_points thread_safe do start_time = current_time_point target_time = global_time_point [].tap do |future_points| while start_time <= target_time future_point = timezoner.at(time_plan.next_time(start_time).seconds) next if start_time > future_point future_points.push(future_point) start_time = future_point end end end end
Private Instance Methods
global_time_point()
click to toggle source
@return [Time]
@api private @since 0.1.0
# File lib/portal/timeline.rb, line 114 def global_time_point timezoner.at(Time.current) end
thread_safe(&block)
click to toggle source
@param block [Block] @return [void]
@api private @since 0.1.0
# File lib/portal/timeline.rb, line 106 def thread_safe(&block) lock.thread_safe(&block) end