Sha256: e7985a14403b73c8b534a8ac9d5c5d4cfe88148b9904ded9468f08ee26fc38da

Contents?: true

Size: 1.42 KB

Versions: 3

Compression:

Stored size: 1.42 KB

Contents

require 'active_support'
require 'active_support/core_ext/hash/deep_merge'
require 'nokogiri'
require 'pry'

module Sources
  module CLDR
    # Updates local subdivision files with data from the Unicode CLDR repository
    class SubdivisionUpdater
      def call
        d = Dir['./tmp/cldr/trunk/common/subdivisions/*.xml']
        loader = Sources::Local::CachedLoader.new(Sources::Local::Subdivision)
        d.each do |file_path|
          language_data = Nokogiri::XML(File.read(file_path))
          language_code = File.basename(file_path, '.*')
          subdivisions = language_data.css('subdivision')
          next if subdivisions.empty?
          last_country_code_seen = nil

          subdivisions.each_with_index do |subdivision, index|
            subdivision = Sources::CLDR::Subdivision.new(language_code: language_code, xml: subdivision)
            data = loader.load(subdivision.country_code)
            data[subdivision.code] ||= {}
            data[subdivision.code] = data[subdivision.code].deep_merge(subdivision.to_h)
            if (last_country_code_seen && last_country_code_seen != subdivision.country_code) || index == subdivisions.size - 1
              puts "Updated #{subdivision.country_code} with language_code #{language_code}"
              loader.save(subdivision.country_code, data)
            end
            last_country_code_seen = subdivision.country_code
          end
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
countries-4.2.3 lib/countries/sources/cldr/subdivision_updater.rb
countries-4.2.2 lib/countries/sources/cldr/subdivision_updater.rb
countries-4.2.1 lib/countries/sources/cldr/subdivision_updater.rb