module TimeCalculations
# Rounds the given time according to start_time and
# precision_in_seconds.
#
# == Examples
# TimeCalculations::round(9.hours + 15.minutes, 8.hours, 30.minutes) #=> 9.hours
# TimeCalculations::round(9.hours + 27.minutes, 8.hours, 15.minutes) #=> 9.hours + 15.minutes
# TimeCalculations::round(9.hours + 27.minutes, 8.hours, 2.hours) #=> 8.hours
#
# == Warnings
# This method ignores secods in it's calculations
def self.round(time, start_time, precision_in_seconds)
(start_time ... 24.hours).step(precision_in_seconds) do |slot_start|
slot = (slot_start ... slot_start+precision_in_seconds)
return slot_start if slot.include?(time.hour.hours + time.min.minutes)
end
end
end