class SearchCopGrammar::Attributes::Date

Public Instance Methods

parse(value) click to toggle source
# File lib/search_cop_grammar/attributes.rb, line 266
def parse(value)
  return value..value unless value.is_a?(::String)

  if value =~ /^[0-9]+ (day|week|month|year)s{0,1} (ago)$/
    number, period, ago = value.split(" ")
    time = number.to_i.send(period.to_sym).send(ago.to_sym)
    time.to_date..::Date.today
  elsif value =~ /^[0-9]{4}$/
    ::Date.new(value.to_i).beginning_of_year..::Date.new(value.to_i).end_of_year
  elsif value =~ %r{^([0-9]{4})(\.|-|/)([0-9]{1,2})$}
    ::Date.new(Regexp.last_match(1).to_i, Regexp.last_match(3).to_i, 15).beginning_of_month..::Date.new(Regexp.last_match(1).to_i, Regexp.last_match(3).to_i, 15).end_of_month
  elsif value =~ %r{^([0-9]{1,2})(\.|-|/)([0-9]{4})$}
    ::Date.new(Regexp.last_match(3).to_i, Regexp.last_match(1).to_i, 15).beginning_of_month..::Date.new(Regexp.last_match(3).to_i, Regexp.last_match(1).to_i, 15).end_of_month
  elsif value =~ %r{[0-9]{4}(\.|-|/)[0-9]{1,2}(\.|-|/)[0-9]{1,2}} || value =~ %r{[0-9]{1,2}(\.|-|/)[0-9]{1,2}(\.|-|/)[0-9]{4}}
    date = ::Date.parse(value)
    date..date
  else
    raise ArgumentError
  end
rescue ArgumentError
  raise SearchCop::IncompatibleDatatype, "Incompatible datatype for #{value}"
end