def parse(value)
return value .. value unless value.is_a?(::String)
if value =~ /^[0-9]{4}$/
::Date.new(value.to_i).beginning_of_year .. ::Date.new(value.to_i).end_of_year
elsif value =~ /^([0-9]{4})(\.|-|\/)([0-9]{1,2})$/
::Date.new($1.to_i, $3.to_i, 15).beginning_of_month .. ::Date.new($1.to_i, $3.to_i, 15).end_of_month
elsif value =~ /^([0-9]{1,2})(\.|-|\/)([0-9]{4})$/
::Date.new($3.to_i, $1.to_i, 15).beginning_of_month .. ::Date.new($3.to_i, $1.to_i, 15).end_of_month
elsif value =~ /[0-9]{4}(\.|-|\/)[0-9]{1,2}(\.|-|\/)[0-9]{1,2}/ || value =~ /[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