Module: Bipm::Data::Importer::Text::French

Defined in:
lib/bipm/data/importer/text/french.rb

Overview

French-language text utilities shared by every scraping strategy. Single source of truth for month-name translation and date parsing (previously duplicated between Common.extract_date and CGPM.parse_date_text).

Constant Summary collapse

MONTH_TRANSLATIONS =
{
  /janvier/i    => "january",
  /f[eé]vrier/i => "february",
  /mars/i       => "march",
  /avril/i      => "april",
  /mai/i        => "may",
  /juin/i       => "june",
  /juillet/i    => "july",
  /ao[uû]t/i    => "august",
  /septembre/i  => "september",
  /octobre/i    => "october",
  /novembre/i   => "november",
  /d[ée]cembre/i => "december",
}.freeze
RANGE_SEPARATORS =
/, | to | au | – | — /.freeze

Class Method Summary collapse

Class Method Details

.parse_date(str) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
# File 'lib/bipm/data/importer/text/french.rb', line 34

def self.parse_date(str)
  return nil if str.nil? || str.to_s.strip.empty?

  translated = translate_months(str.strip.gsub(/\s+/, " "))
  last = translated.split(RANGE_SEPARATORS).map(&:strip).reject(&:empty?).last
  return nil unless last

  Date.parse(last)
rescue Date::Error
  nil
end

.translate_months(str) ⇒ Object



30
31
32
# File 'lib/bipm/data/importer/text/french.rb', line 30

def self.translate_months(str)
  MONTH_TRANSLATIONS.reduce(str) { |s, (fr, en)| s.gsub(fr, en) }
end