Class: TelephoneNumber::TestDataImporter

Inherits:
Object
  • Object
show all
Defined in:
lib/importers/test_data_importer.rb

Constant Summary collapse

URL =
"https://libphonenumber.appspot.com/phonenumberparser?number=%s&country=%s".freeze
COUNTRIES =
{
  AE: %w(971529933171 971553006144 971551000291),
  AR: %w(299154104587 1143211200),
  AU: %w(0467703037),
  BE: %w(32498485960 32477702206 32474095692),
  BO: %w(59178500348 59178006138 59178006139),
  BR: %w(011992339376 1123456789 11961234567 55991472683),
  BY: %w(80152450911 294911911 152450911),
  CA: %w(16135550119 16135550171 16135550112 16135550194
         16135550122 16135550131 15146708700 14169158200),
  CH: %w(41794173875 41795061129 41795820985),
  CL: %w(961234567 221234567),
  CN: %w(15694876068 13910503766 15845989469 05523245954 04717158875 03748086894),
  CO: %w(6012345678 3211234567),
  CR: %w(22123456 83123456),
  DE: %w(15222503070),
  DK: %w(4524453744 4551622172 4542428484),
  EC: %w(593992441504 593984657155 593984015053),
  EE: %w(37253629280 37253682997 37254004517),
  ES: %w(34606217800 34667751353 34646570628),
  FR: %w(0607114556),
  GB: %w(448444156790 442079308181 442076139800 442076361000
         07780991912 442076299400 442072227888),
  HK: %w(64636251),
  HU: %w(36709311285 36709311279 36709311206),
  IE: %w(0863634875),
  IN: %w(915622231515 912942433300 912912510101 911126779191
         912224818000 917462223999 912266653366 912266325757
         914066298585 911242451234 911166566162 911123890606
         911123583754 5622231515 2942433300 2912510101
         1126779191 2224818000 7462223999 2266653366
         2266325757 4066298585 1242451234 1166566162
         1123890606 1123583754 09176642499),
  IT: %w(393478258998 393440161350),
  JP: %w(312345678 9012345678),
  KR: %w(821036424812 821053812833 821085894820),
  MX: %w(4423593227 14423593227),
  NL: %w(31610958780 31610000852 31611427604),
  NO: %w(4792272668 4797065876 4792466013),
  NZ: %w(64212715077 6421577017 64212862111),
  PE: %w(51994156035 51987527881 51972737259),
  PH: %w(639285588185 639285588262 639285548190),
  PL: %w(48665666003 48885882321 48885889958),
  QA: %w(97470482288 97474798678),
  RO: %w(40724242563 40727798526 40727735377),
  SA: %w(966503891468 966501543349 966500939012),
  SE: %w(46708922920 46723985268 46761001966),
  SG: %w(96924755),
  TR: %w(905497728782 905497728780 905497728781),
  TT: %w(18687804765 18687804843 18687804752),
  TW: %w(886905627933 886905627901 886905627925),
  US: %w(16502530000 14044879000 15123435283 13032450086 16175751300
         3175083345 13128404100 12485934000 19497941600 14257395600 13103106000
         16086699600 12125650000 14123456700 14157360000 12068761800
         12023461100 3175082333, 3502341234, 3502523420, 3502504620, 5292500143,
         5292520412),
  VE: %w(584149993108 584248407260 584248271518),
  ZA: %w(27826187617 27823014578 27828840632)
}.freeze

Class Method Summary collapse

Class Method Details

.fetch_data(output_hash) ⇒ Object



74
75
76
77
78
79
80
81
82
83
84
85
86
87
# File 'lib/importers/test_data_importer.rb', line 74

def self.fetch_data(output_hash)
  COUNTRIES.each do |key, value|
    output_hash[key] = {}

    value.each_with_index do |num, counter|
      page = HTTParty.get(format(URL, num, key.to_s))
      parsed_page = Nokogiri::HTML.parse(page)
      body = parsed_page.elements.first.elements.css('body').first
      parsed_data = parse_remote_data(counter, body.elements.css('table')[2])
      output_hash[key].merge!(parsed_data)
    end
  end
  return output_hash
end

.import!Object



67
68
69
70
71
72
# File 'lib/importers/test_data_importer.rb', line 67

def self.import!
  output_hash = {}
  fetch_data(output_hash)
  write_file(output_hash)
  true
end

.parse_remote_data(counter, table) ⇒ Object



89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# File 'lib/importers/test_data_importer.rb', line 89

def self.parse_remote_data(counter, table)
  output = { counter.to_s => {} }
  table.elements.each do |row|
    next if row.elements.one?
    key = case row.elements.css('th').text
          when 'E164 format'
            :e164_formatted
          when 'National format'
            :national_formatted
          when 'International format'
            :international_formatted
          end

    output[counter.to_s][key] = row.elements.css('td').text if key
  end
  return output
end

.write_file(data) ⇒ Object



107
108
109
110
111
112
113
114
115
# File 'lib/importers/test_data_importer.rb', line 107

def self.write_file(data)
  File.open('test/valid_numbers.yml', 'w') do |file|
    file.write "# This file is generated automatically by TestDataImporter. \n" \
      "# Any changes made to this file will be overridden next time test data is generated. \n" \
      "# Please edit TestDataImporter if you need to add test cases. \n"

    file.write data.to_yaml
  end
end