Module: Anastasia

Defined in:
lib/anastasia.rb,
lib/anastasia/version.rb

Constant Summary collapse

NO_SPACE_LANGUAGES =
%w[ja zh].freeze
VERSION =
'0.1.0'

Class Method Summary collapse

Class Method Details

.append(lang, pos, value, ret) ⇒ Object



22
23
24
25
26
27
# File 'lib/anastasia.rb', line 22

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

.append_value(lang, key, value, ret) ⇒ Object



29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/anastasia.rb', line 29

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

.convert(data) ⇒ Object



6
7
8
# File 'lib/anastasia.rb', line 6

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

.convert_internal(data, pos, ret) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
# File 'lib/anastasia.rb', line 10

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

.no_space_language?(lang) ⇒ Boolean

Returns:

  • (Boolean)


45
46
47
48
# File 'lib/anastasia.rb', line 45

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