class TwitterCldr::Resources::Requirements::CldrRequirement

Constants

CLDR_URL
DEEP_MERGER

Attributes

version[R]

Public Class Methods

new(version) click to toggle source
# File lib/twitter_cldr/resources/requirements/cldr_requirement.rb, line 21
def initialize(version)
  @version = version
end

Public Instance Methods

alt?(node) click to toggle source
# File lib/twitter_cldr/resources/requirements/cldr_requirement.rb, line 53
def alt?(node)
  !node.attribute('alt').nil?
end
common_path() click to toggle source
# File lib/twitter_cldr/resources/requirements/cldr_requirement.rb, line 40
def common_path
  File.join(source_path, 'common')
end
draft?(node) click to toggle source
# File lib/twitter_cldr/resources/requirements/cldr_requirement.rb, line 57
def draft?(node)
  draft = node.attribute('draft')
  draft && (
    draft.value == 'unconfirmed' || draft.value == 'provisional'
  )
end
merge_each_ancestor(locale, merge_root: true) { |ancestor_locale| ... } click to toggle source
# File lib/twitter_cldr/resources/requirements/cldr_requirement.rb, line 44
def merge_each_ancestor(locale, merge_root: true)
  locales = locale_chain(locale)
  locales << :root if merge_root

  locales.inject({}) do |result, ancestor_locale|
    deep_merge(yield(ancestor_locale), result)
  end
end
prepare() click to toggle source
# File lib/twitter_cldr/resources/requirements/cldr_requirement.rb, line 25
def prepare
  # download and unzip if source directory doesn't exist
  unless File.directory?(source_path)
    STDOUT.write("Downloading cldr v#{version}... ")
    download
    puts 'done'
  end

  puts "Using cldr v#{version} from #{source_path}"
end
source_path() click to toggle source
# File lib/twitter_cldr/resources/requirements/cldr_requirement.rb, line 36
def source_path
  @source_path ||= File.join(TwitterCldr::VENDOR_DIR, "cldr_v#{version}")
end

Private Instance Methods

cldr_url() click to toggle source
# File lib/twitter_cldr/resources/requirements/cldr_requirement.rb, line 109
def cldr_url
  CLDR_URL % { version: version }
end
deep_merge(h1, h2) click to toggle source
# File lib/twitter_cldr/resources/requirements/cldr_requirement.rb, line 105
def deep_merge(h1, h2)
  h1.merge(h2, &DEEP_MERGER)
end
download() click to toggle source
# File lib/twitter_cldr/resources/requirements/cldr_requirement.rb, line 113
def download
  URI.parse(cldr_url).open do |tempfile|
    FileUtils.mkdir_p(source_path)
    Zip.on_exists_proc = true

    Zip::File.open(tempfile.path) do |file|
      file.each do |entry|
        path = File.join(source_path, entry.name)
        FileUtils.mkdir_p(File.dirname(path))
        file.extract(entry, path)
      end
    end
  end
end
from_fs(locale) click to toggle source
# File lib/twitter_cldr/resources/requirements/cldr_requirement.rb, line 97
def from_fs(locale)
  locale.to_s.gsub('-', '_')
end
locale_chain(locale) click to toggle source
# File lib/twitter_cldr/resources/requirements/cldr_requirement.rb, line 66
def locale_chain(locale)
  locale = from_fs(locale)
  ancestry = [locale]

  loop do
    cur = from_fs(ancestry.last)

    if parents = parent_locales[cur]
      ancestry << to_fs(parents)
    elsif I18n::Locale::Tag.tag(cur).self_and_parents.count > 1
      ancestry << I18n::Locale::Tag.tag(cur).self_and_parents.last.to_sym
    else
      parents = TwitterCldr::Shared::Locale
        .parse(cur)
        .permutations
        .select do |loc|
          File.exist?(File.join(common_path, 'main', "#{loc}.xml"))
        end

      ancestry += parents - [cur]
      break
    end
  end

  ancestry
end
parent_locales() click to toggle source
# File lib/twitter_cldr/resources/requirements/cldr_requirement.rb, line 128
def parent_locales
  @parent_locales ||= supplemental_data.xpath('//parentLocales/parentLocale').each_with_object({}) do |node, ret|
    parent = node.attr('parent')
    locales = node.attr('locales').split(' ')

    locales.each do |locale|
      ret[locale] = parent
    end
  end
end
supplemental_data() click to toggle source
# File lib/twitter_cldr/resources/requirements/cldr_requirement.rb, line 139
def supplemental_data
  @supplemental_data ||= Nokogiri.XML(
    File.read(File.join(common_path, 'supplemental', 'supplementalData.xml'))
  )
end
to_fs(locale) click to toggle source
# File lib/twitter_cldr/resources/requirements/cldr_requirement.rb, line 93
def to_fs(locale)
  locale.to_s.gsub('_', '-').to_sym
end