File: file_data_provider.rb

package info (click to toggle)
ruby-i18n-data 1.1.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 1,356 kB
  • sloc: ruby: 248; makefile: 4
file content (56 lines) | stat: -rw-r--r-- 1,703 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# frozen_string_literal: true
module I18nData
  module FileDataProvider
    require 'fileutils'

    DATA_SEPARATOR = ";;"
    extend self

    def codes(type, language_code)
      unless (data = read_from_file(cache_file_for(type, language_code)))
        raise NoTranslationAvailable, "#{type}-#{language_code}"
      end
      data
    end

    def write_cache(provider)
      languages = provider.codes(
        :languages,
        'EN'
      ).keys + ['zh_CN', 'zh_TW', 'zh_HK', 'bn_IN', 'pt_BR', 'sr@latin', 'nb_NO']
      languages.map do |language_code|
        [:languages, :countries].each do |type|
          data = provider.send(:codes, type, language_code)
          write_to_file(data, cache_file_for(type, language_code))
        rescue NoTranslationAvailable
          warn "No translation available for #{type} #{language_code}" if $DEBUG
        rescue AccessDenied
          warn "Access denied for #{type} #{language_code}"
        end
      end
    end

    private

    def read_from_file(file)
      return nil unless File.exist?(file)
      data = {}
      File.readlines(file, encoding: 'utf-8').each do |line|
        code, translation = line.strip.split(DATA_SEPARATOR, 2)
        data[code] = translation
      end
      data
    end

    def write_to_file(data, file)
      return if data.empty?
      FileUtils.mkdir_p File.dirname(file)
      File.write(file, data.map { |code, translation| "#{code}#{DATA_SEPARATOR}#{translation}" } * "\n")
    end

    def cache_file_for(type, language_code)
      file = "#{type}-#{language_code.sub('-', '_').upcase}"
      File.join(File.dirname(__FILE__), '..', '..', 'cache', 'file_data_provider', "#{file}.txt")
    end
  end
end