Sha256: 4777666805f14abe950eb9d58471376b0af2c3ad975fb9f84149fe404af3cc7e
Contents?: true
Size: 1.46 KB
Versions: 2
Compression:
Stored size: 1.46 KB
Contents
require 'date' module SearchLingo module Parsers # :nodoc: module MDY ## # Pattern for matching US-formatted date strings. # # The year may be two or four digits, or it may be omitted. US_DATE = %r{(?<m>\d{1,2})/(?<d>\d{1,2})(?:/(?<y>\d{2}\d{2}?))?} ## # 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. 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 module_function :parse end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
search_lingo-2.0.0.pre2 | lib/search_lingo/parsers/mdy.rb |
search_lingo-1.0.3 | lib/search_lingo/parsers/mdy.rb |