class TwitterCldr::Resources::ValidityDataImporter

Public Instance Methods

execute() click to toggle source
# File lib/twitter_cldr/resources/validity_data_importer.rb, line 17
def execute
  output_file = File.join(output_path, 'validity_data.yml')
  FileUtils.mkdir_p(output_path)

  File.open(output_file, 'w:utf-8') do |output|
    output.write(
      TwitterCldr::Utils::YAML.dump(
        TwitterCldr::Utils.deep_symbolize_keys(validity_data: validity_data),
        use_natural_symbols: true
      )
    )
  end
end

Private Instance Methods

expand_string_range(str) click to toggle source
# File lib/twitter_cldr/resources/validity_data_importer.rb, line 55
def expand_string_range(str)
  return [str] unless str.include?('~')

  from, to = str.split('~')
  prefix = from[0...(from.size - to.size)]
  from = from[-(to.size)..-1]

  expand_string_range_each(from, to, 0).map do |s|
    "#{prefix}#{s}"
  end
end
expand_string_range_each(from, to, i) { |from| ... } click to toggle source
# File lib/twitter_cldr/resources/validity_data_importer.rb, line 67
def expand_string_range_each(from, to, i, &block)
  return to_enum(__method__, from, to, i) unless block

  if i == from.size
    yield from
    return
  end

  (from[i]..to[i]).each do |c|
    current = "#{from[0...i]}#{c}#{from[(i + 1)..-1]}"
    expand_string_range_each(current, to, i + 1, &block)
  end
end
output_path() click to toggle source
# File lib/twitter_cldr/resources/validity_data_importer.rb, line 85
def output_path
  params.fetch(:output_path)
end
validity_data() click to toggle source
# File lib/twitter_cldr/resources/validity_data_importer.rb, line 33
def validity_data
  {
    languages: validity_data_for('language', casing: :downcase),
    scripts:   validity_data_for('script', casing: :capitalize),
    regions:   validity_data_for('region', casing: :upcase),
    variants:  validity_data_for('variant', casing: :upcase)
  }
end
validity_data_for(type, casing:) click to toggle source
# File lib/twitter_cldr/resources/validity_data_importer.rb, line 42
def validity_data_for(type, casing:)
  doc = Nokogiri.XML(File.read(File.join(validity_path, "#{type}.xml")))

  doc.xpath("//supplementalData/idValidity/id[@type='#{type}']").each_with_object({}) do |data, ret|
    id_status = data.attribute('idStatus').value
    ret[id_status] = data.text.split(' ').flat_map do |datum|
      expand_string_range(datum.strip).map do |str|
        str.send(casing)
      end
    end
  end
end
validity_path() click to toggle source
# File lib/twitter_cldr/resources/validity_data_importer.rb, line 81
def validity_path
  File.join(requirements[:cldr].common_path, 'validity')
end