fiedl/wingolfsplattform

View on GitHub
lib/importers/models/string.rb

Summary

Maintainability
A
25 mins
Test Coverage
class String
  
  alias old_to_datetime to_datetime
  
  def to_datetime
    self.replace_flaws!
    
    if self.blank?
      return nil

    elsif self.start_with? "0000"
      return nil
    
    elsif (self[4..8] == "00000") || (self.length == 4)  # 20030000 || 2003
      str = self[0..3] + "-01-01" # 2003-01-01
      return str.to_datetime

    elsif (self[6..8] == "000")  # 20011000000000Z (no day, but month)
      str = "#{self[0..3]}-#{self[4..5]}-01"  # 2001-10-01
      return str.to_datetime

    else
      old_to_datetime.in_time_zone

    end
  end
  
  def datetime_is_estimate?
    self.replace_flaws!
    (self[4..8] == "00000") or (self.length == 4) or (self[6..8] == "000")
  end
  
  def replace_flaws!
    # In manchen Fällen wurde ein nicht existentes Datum angegeben. 
    # Beispielsweise der 31. November. Das muss hier korrigiert werden, da sonst ein Fehler 
    # erzeugt wird.
    #
    self.gsub!("0431", "0430") if self[4..7] == "0431" # April
    self.gsub!("1131", "1130") if self[4..7] == "1131" # November
    self.gsub!(/^6110000000000Z/, "20061101000000Z")   # W64492. Sonst wird das als Jahr 6110 erkannt.
    self.gsub!(/^061020000000Z/,  "20061020000000Z")   # W64720
    self.gsub!(/^061108000000Z/,  "20061108000000Z")   # W64720
    self.gsub!(/^2010612000000Z/, "20100612000000Z")   # W53886
    self.gsub!("0Z", "00Z") if self.length == 14       # Eine Stelle zu kurz. Z.B. W52570.
  end
  
end