Ответ 1
Rails добавляет метод to_date
к String
. Его источник прост:
# File activesupport/lib/active_support/core_ext/string/conversions.rb, line 42
def to_date
return nil if self.blank?
::Date.new(*::Date._parse(self, false).values_at(:year, :mon, :mday))
end
Date._parse
является родным для Ruby (тот же метод вызывается Date.parse
), а где выполняется реальная работа.
Сначала он использует регулярное выражение для удаления посторонних символов из строки, затем передает его другим методам, например _parse_eu
, _parse_iso
, _parse_dot
и так далее. Каждый из них использует свои собственные регулярные выражения и другие методы, чтобы определить, соответствует ли она дате, которую она понимает, и извлекать из нее значимую информацию. Когда один из них "работает" (т.е. Возвращает true), остальные пропускаются. Наконец, в _parse
, извлеченная информация используется для создания даты и времени, делая немного больше работы, чтобы выяснить, что такое проверка на день недели и значение года "12" должно означать 1912 или 2012.
Документы называют это эвристическим методом, который можно понимать как означающее, что он бросает кучу возможностей на стену, чтобы увидеть, какие палки. Это довольно плохо документировано, но работает замечательно.