Sha256: 88b2788c33884383d1017e3151d05848ddece524d5507bb9f43894cd2239d61c

Contents?: true

Size: 1.08 KB

Versions: 1

Compression:

Stored size: 1.08 KB

Contents

# frozen_string_literal: true

require_relative 'anastasia/version'

module Anastasia
  def self.convert(data)
    convert_internal(data, [], {})
  end

  def self.convert_internal(data, pos, ret)
    data.each do |k, v|
      if k.start_with?(';')
        append(k[1..], pos, v, ret)
      else
        convert_internal(v, pos + k.split('.'), ret)
      end
    end

    ret
  end

  def self.append(lang, pos, value, ret)
    pos = pos.dup
    ret = (ret[lang] ||= {})
    ret = (ret[pos.shift] ||= {}) while pos.count >= 2
    append_value(lang, pos[0], value, ret)
  end

  def self.append_value(lang, key, value, ret)
    case value
    when String
      ret[key] = value
    when Array
      ret[key] = value.join(no_space_language?(lang) ? '' : ' ')
    when Hash
      value.each do |k, v|
        key_with_context = k == '_' ? key : "#{key}_#{k}"
        append_value(lang, key_with_context, v, ret)
      end
    end
  end

  NO_SPACE_LANGUAGES = %w[ja zh].freeze

  def self.no_space_language?(lang)
    lang = lang.split('-').first.downcase
    NO_SPACE_LANGUAGES.include?(lang)
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
anastasia-0.1.0 lib/anastasia.rb