module TimeWindow
Constants
- ALIASES
- InvalidUnit
- InvalidWindow
- VERSION
Attributes
now_proc[RW]
Public Class Methods
call(window, time = now)
click to toggle source
Retrieve the formatted date time window. The `time` param defaults to the current time. Returns a `Time` object.
Accept units are: s (second), m (minute), h (hour).
TimeWindow.call("5m") #=> 2018-12-10 05:40:00 -0800
# File lib/time_window.rb, line 32 def self.call(window, time = now) _, window, unit = *window.match(/\A(\d+)(.)\z/) window = Integer(window) unit = ALIASES.fetch(unit) { raise InvalidUnit, "#{unit.inspect} is not a valid unit" } hour, minute, second = public_send("process_#{unit}_window", time, window) Time.new(time.year, time.month, time.day, hour, minute, second) end
now()
click to toggle source
# File lib/time_window.rb, line 19 def self.now now_proc.call end
process_hour_window(time, window)
click to toggle source
# File lib/time_window.rb, line 59 def self.process_hour_window(time, window) raise InvalidWindow, "#{window.inspect} must be covered by 1..23" unless (1..23).cover?(window) hour = time.hour - (time.hour % window) [hour, 0, 0] end
process_minute_window(time, window)
click to toggle source
# File lib/time_window.rb, line 51 def self.process_minute_window(time, window) raise InvalidWindow, "#{window.inspect} must be covered by 1..59" unless (1..59).cover?(window) minute = time.min - (time.min % window) [time.hour, minute, 0] end
process_second_window(time, window)
click to toggle source
# File lib/time_window.rb, line 43 def self.process_second_window(time, window) raise InvalidWindow, "#{window.inspect} must be covered by 1..59" unless (1..59).cover?(window) second = time.sec - (time.sec % window) [time.hour, time.min, second] end