class Sleek::Interval

Attributes

interval[R]
timeframe[R]

Public Class Methods

interval_value(desc) click to toggle source

Internal: Convert interval description to numeric value.

# File lib/sleek/interval.rb, line 27
def self.interval_value(desc)
  case desc
  when :hourly
    1.hour
  when :daily
    1.day
  when :weekly
    1.week
  when :monthly
    1.month
  else
    raise ArgumentError, 'invalid interval description'
  end
end
new(interval_desc, timeframe) click to toggle source

Internal: Initialize an interval.

interval_desc - the Symbol description of the interval.

Possible values: :hourly, :daily, :weekly,
:monthly.

timeframe - the range of TimeWithZone objects.

# File lib/sleek/interval.rb, line 11
def initialize(interval_desc, timeframe)
  @interval = self.class.interval_value(interval_desc)
  @timeframe = timeframe
end

Public Instance Methods

timeframes() click to toggle source

Internal: Split the timeframe into intervals.

Returns an Array of time range objects.

# File lib/sleek/interval.rb, line 19
def timeframes
  tz = timeframe.first.time_zone
  timeframe.to_i_range.each_slice(interval)
    .to_a[0..-2]
    .map { |tf, _| (tf..(tf + interval)).to_time_range(tz) }
end