Welcome to mirror list, hosted at ThFree Co, Russian Federation.

twine_file_dsl.rb « test - github.com/mapsme/twine.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 5eba9b9a3c434772fdb2377fc9ba133eab634b74 (plain)
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
module TwineFileDSL
  def build_twine_file(*languages)
    @currently_built_twine_file = Twine::StringsFile.new
    @currently_built_twine_file.language_codes.concat languages
    yield
    result = @currently_built_twine_file
    @currently_built_twine_file = nil
    return result
  end

  def add_section(name)
    return unless @currently_built_twine_file
    @currently_built_twine_file_section = Twine::StringsSection.new name
    @currently_built_twine_file.sections << @currently_built_twine_file_section
    yield
    @currently_built_twine_file_section = nil
  end

  def add_row(parameters)
    return unless @currently_built_twine_file
    return unless @currently_built_twine_file_section

    # this relies on Ruby preserving the order of hash elements
    key, value = parameters.first
    row = Twine::StringsRow.new(key.to_s)
    if value.is_a? Hash
      value.each do |language, translation|
        row.translations[language.to_s] = translation
      end
    elsif !value.is_a? Symbol
      language = @currently_built_twine_file.language_codes.first
      row.translations[language] = value
    end

    row.comment = parameters[:comment] if parameters[:comment]
    row.tags = parameters[:tags] if parameters[:tags]
    if parameters[:ref] || value.is_a?(Symbol)
      reference_key = (parameters[:ref] || value).to_s
      row.reference_key = reference_key
      row.reference = @currently_built_twine_file.strings_map[reference_key]
    end

    @currently_built_twine_file_section.rows << row
    @currently_built_twine_file.strings_map[row.key] = row
  end
end