yaml-translator 0.4.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.travis.yml +0 -1
- data/Gemfile.lock +1 -1
- data/README.md +3 -3
- data/example/locale.rb +13 -0
- data/example/new.en.yml +3 -0
- data/lib/yaml-translator.rb +9 -0
- data/lib/yaml-translator/locale.rb +12 -20
- data/lib/yaml-translator/structure.rb +5 -0
- data/lib/yaml-translator/structure/single_key.rb +27 -0
- data/lib/yaml-translator/structure/tree.rb +35 -0
- data/lib/yaml-translator/translator.rb +3 -28
- data/lib/yaml-translator/version.rb +1 -1
- data/spec/yaml-translator/locale_spec.rb +5 -5
- data/spec/yaml-translator/structure/single_key.rb +8 -0
- data/spec/yaml-translator/structure/tree_spec.rb +8 -0
- metadata +11 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 5387a0e1e5e1482632320ccf25455514f2c1fc96
         | 
| 4 | 
            +
              data.tar.gz: ca5121bb2cae23d58858993569ec76685b9df661
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: e10f2395ce53bdb9460a04e40c5e7ba21208cb15f2118f7c4575530fccd3df87cc37be0f85d558fba212edd07faf2a3d22219efc194efb9b5e01c93f77219516
         | 
| 7 | 
            +
              data.tar.gz: 16cf23202f4c212aaad45812cc53d55ca948ae501ff1596b82788c90f1515ef061e0f7832084cfc354a57ae7e073f167f3668dcca67bac1f8ef62b4a0da0aa5e
         | 
    
        data/.travis.yml
    CHANGED
    
    | @@ -2,7 +2,6 @@ language: ruby | |
| 2 2 | 
             
            env:
         | 
| 3 3 | 
             
              secure: "OPbJVv+xHdc56rzLDDpBiPsVtQ6Gmc7k4373BaZArjJbB1Dx34FHBNG0UoyF2XUKXVRs5TWgwbs9M4MDM9U13hv2VozT8/RaOkH48d2eHQ93vJX4P8vfR68AA73TV+LtJ7ktlkPp0JLJ54yfHVmANyOxRv2MIDSGGxg+m/FdaTssded4v0YF2dQSKCwfokwyVSCtAx8dsP0Q5UbOYKRDyjn5MR8xZWWiB9wmxuyTnhtKSyGASb+hO4aHll7pTYhebz1NViQhz0vB8BBP5AWdoi5LsToHi2obhu3+5f18pEfqtraJQJ2wa8ix3VaTuL5z1FHfxw2Etq9Eooa3sbrxvQEisSX+JpCPrxBNy4S4GcpXcc8Zg4b2IhLIww6EpDnOxod85N6Q1EzYvo5URxdM5bYVBNuFLjeVg8BSFGGYfebR/Xx4Zh5vDVWJlfkc7fbpGV4IGKUMHhTVSyT19TwTnJnKcahVZO9lChZFPj+SkTFp+SsdReJg3xnIOr+AuPuxqn2n9PPMMyvQng3VxWog7a2SP8Db6VTY5A1JPpOJXVEsNkHwqiUuE3nNLp6WFIXbYIzmJyYFmm5ij7aoaK/gcvDNHoGz/cPZrW+juIXKJC24Qk8hXrZPzEO54+e+M6qsR3p8TlpN5TSxPoeO0hET2cMX0xHFOHU+UnFDx1oTC0c="
         | 
| 4 4 | 
             
            rvm:
         | 
| 5 | 
            -
              - 2.0.0
         | 
| 6 5 | 
             
              - 2.1
         | 
| 7 6 | 
             
              - 2.2
         | 
| 8 7 | 
             
              - 2.3.0
         | 
    
        data/Gemfile.lock
    CHANGED
    
    
    
        data/README.md
    CHANGED
    
    | @@ -17,7 +17,7 @@ dir = File.dirname(__FILE__) | |
| 17 17 | 
             
            adapter = ::YamlTranslator::Adapters::GoogleTranslateAdapter.new(ENV['GOOGLE_TRANSLATE_API_KEY'])
         | 
| 18 18 | 
             
            translator = ::YamlTranslator::Translator.new(adapter)
         | 
| 19 19 |  | 
| 20 | 
            -
            english_locale = ::YamlTranslator | 
| 20 | 
            +
            english_locale = ::YamlTranslator.load_file("#{dir}/en.yml")
         | 
| 21 21 | 
             
            japanese_locale = english_locale.translate(translator, to: :ja)
         | 
| 22 22 |  | 
| 23 23 | 
             
            p japanese_locale.to_s # convert to japanese locale yaml format
         | 
| @@ -37,8 +37,8 @@ The method of translating the difference is as follows. | |
| 37 37 | 
             
            adapter = ::YamlTranslator::Adapters::GoogleTranslateAdapter.new(ENV['GOOGLE_TRANSLATE_API_KEY'])
         | 
| 38 38 | 
             
            translator = ::YamlTranslator::Translator.new(adapter)
         | 
| 39 39 |  | 
| 40 | 
            -
            before_english_locale = ::YamlTranslator | 
| 41 | 
            -
            after_english_locale = ::YamlTranslator | 
| 40 | 
            +
            before_english_locale = ::YamlTranslator.load_file("/path/to/before/en.yml")
         | 
| 41 | 
            +
            after_english_locale = ::YamlTranslator.load_file("/path/to/after/en.yml")
         | 
| 42 42 |  | 
| 43 43 | 
             
            diff_locale = before_english_locale.diff(after_english_locale)
         | 
| 44 44 | 
             
            diff_japanese_locale = diff_locale.translate(translator, to: :ja)
         | 
    
        data/example/locale.rb
    ADDED
    
    | @@ -0,0 +1,13 @@ | |
| 1 | 
            +
            $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require 'yaml'
         | 
| 4 | 
            +
            require 'yaml-translator'
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            dir = File.dirname(__FILE__)
         | 
| 7 | 
            +
            english_locale1 = ::YamlTranslator.load_file("#{dir}/en.yml")
         | 
| 8 | 
            +
            english_locale2 = ::YamlTranslator.load_file("#{dir}/new.en.yml")
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            diff_locale = english_locale1.diff(english_locale2)
         | 
| 11 | 
            +
             | 
| 12 | 
            +
            merged_locale = english_locale1.merge(diff_locale)
         | 
| 13 | 
            +
            merged_locale.save_to("/tmp")
         | 
    
        data/example/new.en.yml
    ADDED
    
    
    
        data/lib/yaml-translator.rb
    CHANGED
    
    | @@ -1,5 +1,14 @@ | |
| 1 1 | 
             
            require 'yaml-translator/version'
         | 
| 2 | 
            +
            require 'yaml-translator/structure'
         | 
| 2 3 | 
             
            require 'yaml-translator/locale'
         | 
| 3 4 | 
             
            require 'yaml-translator/key_path'
         | 
| 4 5 | 
             
            require 'yaml-translator/translator'
         | 
| 5 6 | 
             
            require 'yaml-translator/adapters'
         | 
| 7 | 
            +
             | 
| 8 | 
            +
            module YamlTranslator
         | 
| 9 | 
            +
              class << self
         | 
| 10 | 
            +
                def load_file(file)
         | 
| 11 | 
            +
                  Locale.load_file(file)
         | 
| 12 | 
            +
                end
         | 
| 13 | 
            +
              end
         | 
| 14 | 
            +
            end
         | 
| @@ -3,6 +3,7 @@ require 'diff/lcs' | |
| 3 3 |  | 
| 4 4 | 
             
            module YamlTranslator
         | 
| 5 5 | 
             
              class Locale
         | 
| 6 | 
            +
             | 
| 6 7 | 
             
                attr_reader :lang, :values
         | 
| 7 8 |  | 
| 8 9 | 
             
                def initialize(values, lang)
         | 
| @@ -15,15 +16,21 @@ module YamlTranslator | |
| 15 16 | 
             
                end
         | 
| 16 17 |  | 
| 17 18 | 
             
                def diff(other)
         | 
| 18 | 
            -
                  before_seq =  | 
| 19 | 
            -
                  after_seq = other. | 
| 19 | 
            +
                  before_seq = to_single_key_hash.map { |k, v| "#{k}: #{v}" }
         | 
| 20 | 
            +
                  after_seq = other.to_single_key_hash.map { |k, v| "#{k}: #{v}" }
         | 
| 20 21 | 
             
                  diffs = Diff::LCS.diff(before_seq, after_seq).flatten.map do |operation|
         | 
| 21 22 | 
             
                    type, position, element = *operation
         | 
| 22 23 | 
             
                    next if type == '-'
         | 
| 23 24 | 
             
                    key, text = *element.split(':')
         | 
| 24 25 | 
             
                    [key, text.strip]
         | 
| 25 26 | 
             
                  end
         | 
| 26 | 
            -
                   | 
| 27 | 
            +
                  single_key_hash = Hash[diffs.compact]
         | 
| 28 | 
            +
                  Locale.new(single_key_hash.to_tree, lang)
         | 
| 29 | 
            +
                end
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                def merge(locale)
         | 
| 32 | 
            +
                  merged = flatten_hash.merge(locale.flatten_hash)
         | 
| 33 | 
            +
                  Locale.new(merged.to_tree, lang)
         | 
| 27 34 | 
             
                end
         | 
| 28 35 |  | 
| 29 36 | 
             
                def save(dir=Dir.pwd)
         | 
| @@ -34,8 +41,8 @@ module YamlTranslator | |
| 34 41 | 
             
                  save(dir)
         | 
| 35 42 | 
             
                end
         | 
| 36 43 |  | 
| 37 | 
            -
                def  | 
| 38 | 
            -
                   | 
| 44 | 
            +
                def to_single_key_hash
         | 
| 45 | 
            +
                  values.to_single_key
         | 
| 39 46 | 
             
                end
         | 
| 40 47 |  | 
| 41 48 | 
             
                def to_s
         | 
| @@ -52,21 +59,6 @@ module YamlTranslator | |
| 52 59 |  | 
| 53 60 | 
             
                private
         | 
| 54 61 |  | 
| 55 | 
            -
                # Covert to a flatten hash
         | 
| 56 | 
            -
                def flatten(values={}, path=KeyPath.new)
         | 
| 57 | 
            -
                  result = {}
         | 
| 58 | 
            -
                  values.each_with_index do |(i, v)|
         | 
| 59 | 
            -
                    path.move_to(i)
         | 
| 60 | 
            -
                    if v.is_a?(Hash)
         | 
| 61 | 
            -
                      result.merge!(flatten(v, path))
         | 
| 62 | 
            -
                    else
         | 
| 63 | 
            -
                      result[path.to_s] = v
         | 
| 64 | 
            -
                    end
         | 
| 65 | 
            -
                    path.leave
         | 
| 66 | 
            -
                  end
         | 
| 67 | 
            -
                  result
         | 
| 68 | 
            -
                end
         | 
| 69 | 
            -
             | 
| 70 62 | 
             
                def write_file(file_path)
         | 
| 71 63 | 
             
                  File.write(file_path, to_s)
         | 
| 72 64 | 
             
                end
         | 
| @@ -0,0 +1,27 @@ | |
| 1 | 
            +
            module YamlTranslator
         | 
| 2 | 
            +
              module Structure
         | 
| 3 | 
            +
                module SingleKey
         | 
| 4 | 
            +
                  # Covert to a flatten hash
         | 
| 5 | 
            +
                  def to_single_key
         | 
| 6 | 
            +
                    compact_of(self, KeyPath.new)
         | 
| 7 | 
            +
                  end
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                  private
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                  # Covert to a flatten hash
         | 
| 12 | 
            +
                  def compact_of(values={}, path=KeyPath.new)
         | 
| 13 | 
            +
                    result = {}
         | 
| 14 | 
            +
                    values.each_with_index do |(i, v)|
         | 
| 15 | 
            +
                      path.move_to(i)
         | 
| 16 | 
            +
                      if v.is_a?(Hash)
         | 
| 17 | 
            +
                        result.merge!(compact_of(v, path))
         | 
| 18 | 
            +
                      else
         | 
| 19 | 
            +
                        result[path.to_s] = v
         | 
| 20 | 
            +
                      end
         | 
| 21 | 
            +
                      path.leave
         | 
| 22 | 
            +
                    end
         | 
| 23 | 
            +
                    result
         | 
| 24 | 
            +
                  end
         | 
| 25 | 
            +
                end
         | 
| 26 | 
            +
              end
         | 
| 27 | 
            +
            end
         | 
| @@ -0,0 +1,35 @@ | |
| 1 | 
            +
            module YamlTranslator
         | 
| 2 | 
            +
              module Structure
         | 
| 3 | 
            +
                module Tree
         | 
| 4 | 
            +
                  def to_tree
         | 
| 5 | 
            +
                    tree_of(self)
         | 
| 6 | 
            +
                  end
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                  private
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                  # Returning the flattened structure to the tree structure
         | 
| 11 | 
            +
                  #
         | 
| 12 | 
            +
                  # @param [Hash] values flatten Hash
         | 
| 13 | 
            +
                  # @return [Hash] translated hash
         | 
| 14 | 
            +
                  def tree_of(values)
         | 
| 15 | 
            +
                    result = {}
         | 
| 16 | 
            +
                    current = result
         | 
| 17 | 
            +
                    values.each do |k, v|
         | 
| 18 | 
            +
                      keys = k.split('.')
         | 
| 19 | 
            +
                      last_key = keys.pop
         | 
| 20 | 
            +
                      keys.each do |ks|
         | 
| 21 | 
            +
                        current = if current.key?(ks)
         | 
| 22 | 
            +
                                    current[ks]
         | 
| 23 | 
            +
                                  else
         | 
| 24 | 
            +
                                    current[ks] = {}
         | 
| 25 | 
            +
                                    current[ks]
         | 
| 26 | 
            +
                                  end
         | 
| 27 | 
            +
                      end
         | 
| 28 | 
            +
                      current[last_key] = v
         | 
| 29 | 
            +
                      current = result
         | 
| 30 | 
            +
                    end
         | 
| 31 | 
            +
                    result
         | 
| 32 | 
            +
                  end
         | 
| 33 | 
            +
                end
         | 
| 34 | 
            +
              end
         | 
| 35 | 
            +
            end
         | 
| @@ -2,6 +2,7 @@ require "yaml-translator/adapters" | |
| 2 2 |  | 
| 3 3 | 
             
            module YamlTranslator
         | 
| 4 4 | 
             
              class Translator
         | 
| 5 | 
            +
             | 
| 5 6 | 
             
                def initialize(adapter = Adapters::NoopAdaptor.new)
         | 
| 6 7 | 
             
                  @adapter = adapter
         | 
| 7 8 | 
             
                end
         | 
| @@ -11,34 +12,8 @@ module YamlTranslator | |
| 11 12 | 
             
                # @param [Locale] locale of translate target
         | 
| 12 13 | 
             
                # @return [Locale] locale
         | 
| 13 14 | 
             
                def translate(locale, options={})
         | 
| 14 | 
            -
                  translated = @adapter.translate(locale. | 
| 15 | 
            -
                  Locale.new( | 
| 16 | 
            -
                end
         | 
| 17 | 
            -
             | 
| 18 | 
            -
                private
         | 
| 19 | 
            -
             | 
| 20 | 
            -
                # Returning the flattened structure to the tree structure
         | 
| 21 | 
            -
                #
         | 
| 22 | 
            -
                # @param [Hash] values flatten Hash
         | 
| 23 | 
            -
                # @return [Hash] translated hash
         | 
| 24 | 
            -
                def rebuild(values)
         | 
| 25 | 
            -
                  result = {}
         | 
| 26 | 
            -
                  current = result
         | 
| 27 | 
            -
                  values.each do |k, v|
         | 
| 28 | 
            -
                    keys = k.split('.')
         | 
| 29 | 
            -
                    last_key = keys.pop
         | 
| 30 | 
            -
                    keys.each do |ks|
         | 
| 31 | 
            -
                      current = if current.key?(ks)
         | 
| 32 | 
            -
                                  current[ks]
         | 
| 33 | 
            -
                                else
         | 
| 34 | 
            -
                                  current[ks] = {}
         | 
| 35 | 
            -
                                  current[ks]
         | 
| 36 | 
            -
                                end
         | 
| 37 | 
            -
                    end
         | 
| 38 | 
            -
                    current[last_key] = v
         | 
| 39 | 
            -
                    current = result
         | 
| 40 | 
            -
                  end
         | 
| 41 | 
            -
                  result
         | 
| 15 | 
            +
                  translated = @adapter.translate(locale.to_single_key_hash, options)
         | 
| 16 | 
            +
                  Locale.new(translated.to_tree, options[:to])
         | 
| 42 17 | 
             
                end
         | 
| 43 18 | 
             
              end
         | 
| 44 19 | 
             
            end
         | 
| @@ -13,7 +13,7 @@ describe YamlTranslator::Locale do | |
| 13 13 | 
             
              describe '#diff' do
         | 
| 14 14 | 
             
                let(:before_locale) { load_locale('diff/before/en') }
         | 
| 15 15 | 
             
                let(:after_locale) { load_locale('diff/after/en') }
         | 
| 16 | 
            -
                let(: | 
| 16 | 
            +
                let(:single_key_hash) do
         | 
| 17 17 | 
             
                  {
         | 
| 18 18 | 
             
                    'en.foo1.foo3' => 'foo1-3'
         | 
| 19 19 | 
             
                  }
         | 
| @@ -21,12 +21,12 @@ describe YamlTranslator::Locale do | |
| 21 21 | 
             
                it 'should be return flatten hash' do
         | 
| 22 22 | 
             
                  diff_locale = before_locale.diff(after_locale)
         | 
| 23 23 | 
             
                  expect(diff_locale.lang).to eq('en')
         | 
| 24 | 
            -
                  expect(diff_locale. | 
| 24 | 
            +
                  expect(diff_locale.to_single_key_hash).to eq(single_key_hash)
         | 
| 25 25 | 
             
                end
         | 
| 26 26 | 
             
              end
         | 
| 27 27 |  | 
| 28 | 
            -
              describe '# | 
| 29 | 
            -
                let(: | 
| 28 | 
            +
              describe '#to_single_key_hash' do
         | 
| 29 | 
            +
                let(:single_key_hash) do
         | 
| 30 30 | 
             
                  {
         | 
| 31 31 | 
             
                    'en.bar' => 'bar',
         | 
| 32 32 | 
             
                    'en.foo'=> 'foo',
         | 
| @@ -35,7 +35,7 @@ describe YamlTranslator::Locale do | |
| 35 35 | 
             
                  }
         | 
| 36 36 | 
             
                end
         | 
| 37 37 | 
             
                it 'should be return flatten hash' do
         | 
| 38 | 
            -
                  expect(locale. | 
| 38 | 
            +
                  expect(locale.to_single_key_hash).to eq(single_key_hash)
         | 
| 39 39 | 
             
                end
         | 
| 40 40 | 
             
              end
         | 
| 41 41 | 
             
              describe '#to_s' do
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: yaml-translator
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.5.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Noritaka Horio
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2017-02- | 
| 11 | 
            +
            date: 2017-02-06 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: easy_translate
         | 
| @@ -155,6 +155,8 @@ files: | |
| 155 155 | 
             
            - Rakefile
         | 
| 156 156 | 
             
            - example/en.yml
         | 
| 157 157 | 
             
            - example/google_translate.rb
         | 
| 158 | 
            +
            - example/locale.rb
         | 
| 159 | 
            +
            - example/new.en.yml
         | 
| 158 160 | 
             
            - lib/yaml-translator.rb
         | 
| 159 161 | 
             
            - lib/yaml-translator/adapters.rb
         | 
| 160 162 | 
             
            - lib/yaml-translator/adapters/base_adapter.rb
         | 
| @@ -162,6 +164,9 @@ files: | |
| 162 164 | 
             
            - lib/yaml-translator/adapters/noop_adapter.rb
         | 
| 163 165 | 
             
            - lib/yaml-translator/key_path.rb
         | 
| 164 166 | 
             
            - lib/yaml-translator/locale.rb
         | 
| 167 | 
            +
            - lib/yaml-translator/structure.rb
         | 
| 168 | 
            +
            - lib/yaml-translator/structure/single_key.rb
         | 
| 169 | 
            +
            - lib/yaml-translator/structure/tree.rb
         | 
| 165 170 | 
             
            - lib/yaml-translator/translator.rb
         | 
| 166 171 | 
             
            - lib/yaml-translator/version.rb
         | 
| 167 172 | 
             
            - spec/fixtures/diff/after/en.yml
         | 
| @@ -172,6 +177,8 @@ files: | |
| 172 177 | 
             
            - spec/helpers/locale_helper.rb
         | 
| 173 178 | 
             
            - spec/spec_helper.rb
         | 
| 174 179 | 
             
            - spec/yaml-translator/locale_spec.rb
         | 
| 180 | 
            +
            - spec/yaml-translator/structure/single_key.rb
         | 
| 181 | 
            +
            - spec/yaml-translator/structure/tree_spec.rb
         | 
| 175 182 | 
             
            - spec/yaml-translator/translator_spec.rb
         | 
| 176 183 | 
             
            - yaml-translator.gemspec
         | 
| 177 184 | 
             
            homepage: https://github.com/holyshared/yaml-translator
         | 
| @@ -207,4 +214,6 @@ test_files: | |
| 207 214 | 
             
            - spec/helpers/locale_helper.rb
         | 
| 208 215 | 
             
            - spec/spec_helper.rb
         | 
| 209 216 | 
             
            - spec/yaml-translator/locale_spec.rb
         | 
| 217 | 
            +
            - spec/yaml-translator/structure/single_key.rb
         | 
| 218 | 
            +
            - spec/yaml-translator/structure/tree_spec.rb
         | 
| 210 219 | 
             
            - spec/yaml-translator/translator_spec.rb
         |