Module: Mpql::DateParser

Defined in:
lib/mpql/date_parser.rb

Class Method Summary collapse

Class Method Details

.parse(input) ⇒ Object

Parse a date string into yyyy-mm-dd format.

Supported formats:

- "today"      -> today's date
- "yesterday"  -> yesterday's date
- "Nd"         -> N days ago (e.g., "7d")
- "Nw"         -> N weeks ago (e.g., "3w")
- "Nm"         -> N months ago (e.g., "1m")
- "yyyy-mm-dd" -> passed through as-is


18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/mpql/date_parser.rb', line 18

def parse(input)
  case input.to_s.strip.downcase
  when "today"
    Date.today.strftime("%Y-%m-%d")
  when "yesterday"
    (Date.today - 1).strftime("%Y-%m-%d")
  when /\A(\d+)d\z/
    (Date.today - ::Regexp.last_match(1).to_i).strftime("%Y-%m-%d")
  when /\A(\d+)w\z/
    (Date.today - (::Regexp.last_match(1).to_i * 7)).strftime("%Y-%m-%d")
  when /\A(\d+)m\z/
    (Date.today << ::Regexp.last_match(1).to_i).strftime("%Y-%m-%d")
  when /\A\d{4}-\d{2}-\d{2}\z/
    Date.parse(input.strip).strftime("%Y-%m-%d")
  else
    raise InputError, "Invalid date format: '#{input}'. Use yyyy-mm-dd, today, yesterday, Nd, Nw, or Nm"
  end
end