class Blackcal::TimeOfDayRange
Time of day range
Public Class Methods
new(start, finish = nil)
click to toggle source
Initialize time of day range @param [TimeOfDay, Time, Integer, nil] start @param [TimeOfDay, Time, Integer, nil] finish
# File lib/blackcal/range/time_of_day_range.rb, line 13 def initialize(start, finish = nil) @start = start @finish = finish end
Public Instance Methods
cover?(timestamp)
click to toggle source
Returns true if it covers timestamp @return [Boolean]
# File lib/blackcal/range/time_of_day_range.rb, line 20 def cover?(timestamp) return false if @start.nil? && @finish.nil? t1 = TimeOfDay.new(timestamp.hour, timestamp.min) if start == finish t1 == start elsif start > finish t1 <= finish || t1 >= start else t1 >= start && t1 <= finish end end
each(resolution: :hour, &block)
click to toggle source
Iterate over range @param resolution [Symbol] :hour our :min
# File lib/blackcal/range/time_of_day_range.rb, line 61 def each(resolution: :hour, &block) to_a(resolution: resolution).each(&block) end
finish()
click to toggle source
Return finish hour @return [TimeOfDay]
# File lib/blackcal/range/time_of_day_range.rb, line 41 def finish @finish_time ||= to_time_of_day(@finish || 0) end
start()
click to toggle source
Return start hour @return [TimeOfDay]
# File lib/blackcal/range/time_of_day_range.rb, line 35 def start @start_time ||= to_time_of_day(@start || 0) end
to_a(resolution: :hour)
click to toggle source
Returns range as an array @param resolution [Symbol] :hour our :min @return [Array<Array<Integer>>] times
# File lib/blackcal/range/time_of_day_range.rb, line 48 def to_a(resolution: :hour) return [] if @start.nil? && @finish.nil? if finish < start to_time_array(start, TimeOfDay.new(23), resolution) + to_time_array(TimeOfDay.new(0), finish, resolution) else to_time_array(start, finish, resolution) end end
Private Instance Methods
to_time_array(start, finish, resolution)
click to toggle source
# File lib/blackcal/range/time_of_day_range.rb, line 67 def to_time_array(start, finish, resolution) if resolution == :hour return (start.hour..finish.hour).map { |hour| [hour, 0] } end # minute resolution times = [] (start.hour..finish.hour).each do |hour| finish_min = if hour == finish.hour && finish.min != 0 finish.min else 59 end (start.min..finish_min).each { |min| times << [hour, min] } end times end
to_time_of_day(number_or_day)
click to toggle source
# File lib/blackcal/range/time_of_day_range.rb, line 85 def to_time_of_day(number_or_day) return number_or_day if number_or_day.is_a?(TimeOfDay) if number_or_day.is_a?(Time) return TimeOfDay.new(number_or_day.hour, number_or_day.min) end TimeOfDay.new(number_or_day) end