Module: SearchLingo::Parsers::MDY
- Included in:
- DateParser
- Defined in:
- lib/search_lingo/parsers/mdy.rb
Constant Summary collapse
- US_DATE =
Pattern for matching US-formatted date strings.
The year may be two or four digits, or it may be omitted.
%r{(?<m>\d{1,2})/(?<d>\d{1,2})(?:/(?<y>\d{2}\d{2}?))?}
Class Method Summary collapse
-
.parse(term, relative_to: Date.today) ⇒ Object
Returns a
Date
object for the date represented byterm
.
Class Method Details
.parse(term, relative_to: Date.today) ⇒ Object
Returns a Date
object for the date represented by term
. Returns nil
if term
can not be parsed.
If the year has two digits, it will be implicitly expanded into a four-digit year by Date.parse
. Otherwise it will be used as is.
If the year is omitted, it will be inferred using relative_to
as a reference date. In this scenario, the resulting date will always be less than or equal to the reference date. If relative_to
omitted, it defaults to today’s date.
Available as both a class method and an instance method.
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/search_lingo/parsers/mdy.rb', line 25 def parse(term, relative_to: Date.today) term.match /\A#{US_DATE}\z/ do |m| return Date.parse "#{m[:y]}/#{m[:m]}/#{m[:d]}" if m[:y] ref = relative_to day = Integer(m[:d]) month = Integer(m[:m]) year = if month < ref.month || month == ref.month && day <= ref.day ref.year else ref.year - 1 end Date.new year, month, day end rescue ArgumentError end |