class DateRange

Constants

REGEX_PATTERNS
UNITS

Public Class Methods

parse(string) click to toggle source
# File lib/daterange.rb, line 7
def self.parse(string)
  _start, _end = _parse(string)

  if _start && _end
    (_start.._end)
  else
    nil
  end
end

Private Class Methods

_parse(string) click to toggle source
# File lib/daterange.rb, line 28
def self._parse(string)
  case string
  when REGEX_PATTERNS[:this_unit]
    unit = REGEX_PATTERNS[:this_unit].match(string)[1]
    [
      now.public_send("beginning_of_#{unit}"),
      now.public_send("end_of_#{unit}")
    ]
  when REGEX_PATTERNS[:this_n_unit]
    matches = REGEX_PATTERNS[:this_n_unit].match(string)
    n, unit = matches[1], matches[2]
    [
      (now.public_send("beginning_of_#{unit}") - (Integer(n)-1).public_send(unit)),
      now.public_send("end_of_#{unit}")
    ]
  when REGEX_PATTERNS[:prev_n_unit]
    matches = REGEX_PATTERNS[:prev_n_unit].match(string)
    n, unit = matches[1], matches[2]
    [
      now.public_send("beginning_of_#{unit}")  - Integer(n).public_send(unit),
      now.public_send("end_of_#{unit}") - 1.public_send(unit)
    ]
  when REGEX_PATTERNS[:prev_unit]
    unit = REGEX_PATTERNS[:prev_unit].match(string)[1]
    _parse("previous_1_#{unit}")
  when 'today'
    _parse('this_day')
  when 'yesterday'
    _parse('previous_day')
  end
end
now() click to toggle source
# File lib/daterange.rb, line 60
def self.now
  DateTime.now.utc
end