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