goshakkk/sleek

View on GitHub
lib/sleek/core_ext/range.rb

Summary

Maintainability
A
0 mins
Test Coverage
class Range
  # Convert both ends of range to integers.
  def to_i_range
    self.begin.to_i..self.end.to_i
  end

  # Convert both ends of range to times.
  def to_time_range(zone = nil)
    time = zone ? zone : Time
    time.at(self.begin)..time.at(self.end)
  end

  def int_range?
    self.begin.is_a?(Integer)
  end

  # Check if range elements are times.
  def time_range?
    self.begin.is_a?(Time)
  end

  # Calculate the differentce between ends of the range.
  def difference
    self.end - self.begin
  end

  # Make up a range for previous +n+ periods.
  # Start of new range would be start of current - difference between
  # +start+ and +end * number+ of periods, end of new range would be start of
  # current.
  #
  # @example
  #   (1200..1300).previous
  #   # => 1100..1200
  def previous(n = 1)
    self - difference * n
  end

  def -(other)
    (self.begin - other)..(self.end - other)
  end
end