xlocalize 0.2.1 → 0.2.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3f92b8896b3c93789775661d8d918efa00504b0f
4
- data.tar.gz: 29f41bf80a64c1da95806679d0b19fcc9ff1fdc0
3
+ metadata.gz: fc1db3d226514b4c5d809d86fd2dedcdde3723cc
4
+ data.tar.gz: 3b7203835f011707bf6e2a5f9211d52fba40b018
5
5
  SHA512:
6
- metadata.gz: 5e503707d2265b37717c365a1c67b1ab85d1da11776a5aa5077b32ac8b792fb551f4c32f3fd16cc2a6f8bbdc20dedffcb04299f5a4c39cadc743318696dd41d6
7
- data.tar.gz: 1b16f3dfc86abe85824cb3769b2362a79d1cc62edacb3da884e5178f0cd58ebfdf7475ce8a44dd23b906662a9c57422df69ec3c34a1ad673146274347d8afcee
6
+ metadata.gz: b9d1f17f00b1523166cabad373f60e6b8eab502f5113575c19c758335be5d05d60df2af20a8fe704abc736e6324355bbb3a4f31477da1e0a0b697e8612c80833
7
+ data.tar.gz: 06d71123e95960f687ad162389adf70c6fce1f692f44727ead36a74ebaa49106d1060d9dcd7e923328c94ae8a1dec01d6bc61824e2b97e13dee34b2302a63569
data/.travis.yml ADDED
@@ -0,0 +1,16 @@
1
+ language: ruby
2
+ cache: bundler
3
+ rvm: 2.0.0
4
+ osx_image: xcode8
5
+ git:
6
+ depth: 1
7
+ before_install: gem install bundler
8
+ install: bundle install
9
+ script: bundle exec rspec -f d -c
10
+ os: osx
11
+ addons:
12
+ code_climate:
13
+ repo_token: b4206ed2b9443314c998e8909dfa31f0ed476ea5ab460b98e102cd20508ff564
14
+ after_success:
15
+ - bundle exec codeclimate-test-reporter
16
+
data/README.md CHANGED
@@ -1,3 +1,9 @@
1
+ [![Build Status](https://travis-ci.org/viktorasl/xlocalize.svg?branch=master)](https://travis-ci.org/viktorasl/xlocalize)
2
+ [![Gem Version](https://badge.fury.io/rb/xlocalize.svg)](https://badge.fury.io/rb/xlocalize)
3
+ [![Code Climate](https://codeclimate.com/github/viktorasl/xlocalize/badges/gpa.svg)](https://codeclimate.com/github/viktorasl/xlocalize)
4
+ [![Test Coverage](https://codeclimate.com/github/viktorasl/xlocalize/badges/coverage.svg)](https://codeclimate.com/github/viktorasl/xlocalize/coverage)
5
+ [![Inline docs](http://inch-ci.org/github/viktorasl/xlocalize.svg?branch=master)](http://inch-ci.org/github/viktorasl/xlocalize)
6
+
1
7
  # Xlocalize
2
8
 
3
9
  To see all commands execute:
@@ -1,9 +1,9 @@
1
1
  require 'xlocalize/webtranslateit'
2
+ require 'xlocalize/xliff'
2
3
  require 'colorize'
3
4
  require 'nokogiri'
4
5
  require 'plist'
5
6
  require 'yaml'
6
- require 'pathname'
7
7
 
8
8
  module Xlocalize
9
9
  class Executor
@@ -30,7 +30,10 @@ module Xlocalize
30
30
  end
31
31
 
32
32
  purelyze(master_lang, target, excl_prefix, project)
33
+ push_master_file(wti, master_lang, master_file_name)
34
+ end
33
35
 
36
+ def push_master_file(wti, master_lang, master_file_name)
34
37
  # Pushing master file to WebtranslateIt
35
38
  begin
36
39
  puts "Uploading master file to WebtranslateIt"
@@ -49,68 +52,50 @@ module Xlocalize
49
52
 
50
53
  def purelyze(locale, target, excl_prefix, project)
51
54
  locale_file_name = locale_file_name(locale)
52
- target_prefix = "#{target}/"
53
55
  doc = Nokogiri::XML(open(locale_file_name))
54
56
 
55
- puts "Removing all files not matching required targets"
56
- doc.xpath("//xmlns:file").each { |node|
57
- fname = node["original"]
58
- node.remove if !fname.start_with?(target_prefix) || !fname.include?(".lproj/")
59
- }
60
-
61
- puts "Removing trans-unit's having reserverd prefix in their sources"
62
- doc.xpath("//xmlns:source").each { |node|
63
- node.parent.remove if node.content.start_with?(excl_prefix)
64
- }
65
-
66
- puts "Filtering plurals"
67
- plurals = {}
68
- doc.xpath("//xmlns:file").each { |node|
69
- fname = node["original"]
70
- next if !fname.end_with?(".strings")
71
- fname_stringsdict = fname << 'dict'
72
- file_full_path = Pathname.new(project).split.first.to_s << '/' << fname_stringsdict
73
- next if !File.exist?(file_full_path)
74
-
75
- Plist::parse_xml(file_full_path).each do |key, val|
76
- values = val["value"]
77
- transl = values.select { |k, v| ['zero', 'one', 'few', 'other'].include?(k) }
78
- plurals[fname_stringsdict] = {key => transl}
79
- sel = 'body > trans-unit[id="' << key << '"]'
80
- node.css(sel).remove
81
- end
82
- }
83
-
84
- puts "Removing all files having no trans-unit elements after removal"
85
- doc.xpath("//xmlns:body").each { |node|
86
- node.parent.remove if node.elements.count == 0
87
- }
57
+ puts "Removing all files not matching required targets" if $VERBOSE
58
+ doc.filter_not_target_files(target)
59
+ puts "Removing trans-unit's having reserverd prefix in their sources" if $VERBOSE
60
+ doc.filter_trans_units(excl_prefix)
61
+ puts "Filtering plurals" if $VERBOSE
62
+ plurals = doc.filter_plurals(project)
63
+ puts "Removing all files having no trans-unit elements after removal" if $VERBOSE
64
+ doc.filter_empty_files
88
65
 
89
- puts "Writing modified XLIFF file to #{locale_file_name}"
66
+ puts "Writing modified XLIFF file to #{locale_file_name}" if $VERBOSE
90
67
  File.open(locale_file_name, 'w') { |f| f.write(doc.to_xml) }
91
-
92
68
  if !plurals.empty?
93
- puts "Writing plurals to plurals YAML file"
69
+ puts "Writing plurals to plurals YAML file" if $VERBOSE
94
70
  File.open(plurals_file_name(locale), 'w') { |f| f.write({locale => plurals}.to_yaml) }
95
71
  end
96
72
  end
97
73
 
74
+ def out_list_of_translations_of_locale(wti, locale, translations)
75
+ puts "Downloading translations for #{locale}"
76
+ translations = wti.pull(locale)
77
+ plurals_content = translations['plurals']
78
+
79
+ out_list = [{
80
+ "path" => "#{locale}.xliff",
81
+ "content" => translations['xliff']
82
+ }]
83
+ out_list << {
84
+ "path" => "#{locale}_plurals.yaml",
85
+ "content" => plurals_content
86
+ } if not plurals_content.nil?
87
+
88
+ return out_list
89
+ end
90
+
98
91
  def download(wti, locales)
99
92
  begin
100
93
  locales.each do |locale|
101
- puts "Downloading translations for #{locale}"
102
- translations = wti.pull(locale)
103
-
104
- File.open("#{locale}.xliff", "w") {|file|
105
- file.write(translations['xliff'])
106
- puts "Done saving xliff.".green
107
- }
108
-
109
- if !translations['plurals'].nil?
110
- File.open("#{locale}_plurals.yaml", "w") {|file|
111
- file.write(translations['plurals'])
112
- puts "Done saving plurals.".green
113
- }
94
+ out_list_of_translations_of_locale(wti, locale, translations).each do |out|
95
+ File.open(out["path"], "w") do |file|
96
+ file.write(out["content"])
97
+ puts "Done saving #{out['path']}.".green
98
+ end
114
99
  end
115
100
  end
116
101
  rescue => err
@@ -118,26 +103,26 @@ module Xlocalize
118
103
  end
119
104
  end
120
105
 
121
- def import_xliff(locale)
122
- doc = Nokogiri::XML(open("#{locale}.xliff"))
123
-
124
- doc.xpath("//xmlns:file").each do |node|
125
- file_name = node["original"]
126
- parts = file_name.split('/')
127
- name = ""
128
- parts.each_with_index do |part, idx|
129
- name += "/" if idx > 0
130
- if part.end_with?(".lproj")
131
- name += "#{locale}.lproj"
132
- elsif idx+1 == parts.count
133
- # TODO: join all parts till the last '.'
134
- name += "#{part.split('.')[0]}.strings"
135
- else
136
- name += part
137
- end
106
+ def filename_from_xliff_provided_filename(file_name)
107
+ parts = file_name.split('/')
108
+ name = ""
109
+ parts.each_with_index do |part, idx|
110
+ name += "/" if idx > 0
111
+ if part.end_with?(".lproj")
112
+ name += "#{locale}.lproj"
113
+ elsif idx+1 == parts.count
114
+ # TODO: join all parts till the last '.'
115
+ name += "#{part.split('.')[0]}.strings"
116
+ else
117
+ name += part
138
118
  end
139
-
140
- File.open(name, "w") do |file|
119
+ end
120
+ return name
121
+ end
122
+
123
+ def import_xliff(locale)
124
+ Nokogiri::XML(open("#{locale}.xliff")).xpath("//xmlns:file").each do |node|
125
+ File.open(filename_from_xliff_provided_filename(node["original"]), "w") do |file|
141
126
  (node > "body > trans-unit").each do |trans_unit|
142
127
  key = trans_unit["id"]
143
128
  target = (trans_unit > "target").text
@@ -148,7 +133,6 @@ module Xlocalize
148
133
  file.write "\"#{key}\" = #{target.inspect};\n\n"
149
134
  end
150
135
  end
151
-
152
136
  end
153
137
  end
154
138
 
@@ -172,11 +156,11 @@ module Xlocalize
172
156
  end
173
157
 
174
158
  def import(locales)
175
- puts 'Importing translations'
159
+ puts 'Importing translations' if $VERBOSE
176
160
  locales.each do |locale|
177
161
  import_xliff(locale)
178
162
  import_plurals_if_needed(locale)
179
- puts "Done #{locale}".green
163
+ puts "Done #{locale}".green if $VERBOSE
180
164
  end
181
165
  end
182
166
  end
@@ -1,4 +1,4 @@
1
1
  module Xlocalize
2
- VERSION = "0.2.1"
2
+ VERSION = "0.2.2"
3
3
  DESCRIPTION = "Xcode localizations import/export helper tool"
4
4
  end
@@ -11,10 +11,10 @@ module Xlocalize
11
11
  attr_reader :xliff_file_id
12
12
  attr_reader :plurals_file_id
13
13
 
14
- def initialize(key)
14
+ def initialize(key, http = Net::HTTP.new("webtranslateit.com", 443))
15
15
  @key = key
16
16
 
17
- @http = Net::HTTP.new("webtranslateit.com", 443)
17
+ @http = http
18
18
  @http.use_ssl = true
19
19
 
20
20
  @http.request(Net::HTTP::Get.new("/api/projects/#{@key}")) {|response|
@@ -23,73 +23,69 @@ module Xlocalize
23
23
  project["project_files"].each {|file|
24
24
  next if file["locale_code"] != @source_locale
25
25
  @xliff_file_id = file["id"] if file['name'].end_with? '.xliff'
26
- @plurals_file_id = file["id"] if file['name'] == 'plurals.yaml'
26
+ @plurals_file_id = file["id"] if file['name'] == 'plurals.yml'
27
27
  }
28
- raise "Could not find master xliff file for source locale #{@source_locale}" if @xliff_file_id.nil?
29
28
  }
29
+ raise "Could not find master xliff file for source locale #{@source_locale}" if @xliff_file_id.nil?
30
+ end
31
+
32
+ def send_request(request)
33
+ resp = nil
34
+ @http.request(request) { |res|
35
+ if !res.code.to_i.between?(200, 300)
36
+ raise JSON.parse(res.body)["error"]
37
+ end
38
+ resp = res
39
+ }
40
+ return resp
41
+ end
42
+
43
+ def master_file_for_locale_request(file_id, file, override)
44
+ # /api/projects/:project_token/files/:master_project_file_id/locales/:locale_code [PUT]
45
+ return Net::HTTP::Put::Multipart.new("/api/projects/#{@key}/files/#{file_id}/locales/#{@source_locale}", {
46
+ "file" => UploadIO.new(file, "text/plain", file.path),
47
+ "merge" => !override,
48
+ "ignore_missing" => true,
49
+ "label" => "",
50
+ "low_priority" => false
51
+ })
30
52
  end
31
53
 
32
54
  def push_master_plurals(plurals_file, override = true)
33
55
  if @plurals_file_id.nil?
34
- puts 'Creating plurals file'
56
+ if $VERBOSE
57
+ $stderr.puts 'Creating plurals file'
58
+ end
35
59
  # /api/projects/:project_token/files [POST]
36
- request = Net::HTTP::Post::Multipart.new("/api/projects/#{@key}/files", {
60
+ send_request(Net::HTTP::Post::Multipart.new("/api/projects/#{@key}/files", {
37
61
  "file" => UploadIO.new(plurals_file, "text/plain", plurals_file.path),
38
- "name" => "plurals.yaml",
62
+ "name" => "plurals.yml",
39
63
  "low_priority" => false
40
- })
41
- @http.request(request) { |res|
42
- if !res.code.to_i.between?(200, 300)
43
- raise JSON.parse(res.body)["error"]
44
- end
45
- }
64
+ }))
46
65
  else
47
- puts 'Updating plurals file'
48
- # /api/projects/:project_token/files/:master_project_file_id/locales/:locale_code [PUT]
49
- request = Net::HTTP::Put::Multipart.new("/api/projects/#{@key}/files/#{@plurals_file_id}/locales/#{@source_locale}", {
50
- "file" => UploadIO.new(plurals_file, "text/plain", plurals_file.path),
51
- "merge" => !override,
52
- "ignore_missing" => true,
53
- "label" => "",
54
- "low_priority" => false
55
- })
56
- @http.request(request) { |res|
57
- if !res.code.to_i.between?(200, 300)
58
- raise JSON.parse(res.body)["error"]
59
- end
60
- }
66
+ if $VERBOSE
67
+ $stderr.puts 'Updating plurals file'
68
+ end
69
+ send_request(master_file_for_locale_request(@plurals_file_id, plurals_file, override))
61
70
  end
62
71
  end
63
72
 
64
73
  def push_master(file, plurals_file, override = true)
65
- puts 'Updating xliff file'
66
- # uploding master xliff file
67
- request = Net::HTTP::Put::Multipart.new("/api/projects/#{@key}/files/#{@xliff_file_id}/locales/#{@source_locale}", {
68
- "file" => UploadIO.new(file, "text/plain", file.path),
69
- "merge" => !override,
70
- "ignore_missing" => true,
71
- "label" => "",
72
- "low_priority" => false })
73
-
74
- @http.request(request) {|res|
75
- if !res.code.to_i.between?(200, 300)
76
- raise JSON.parse(res.body)["error"]
77
- end
78
- }
79
-
74
+ if $VERBOSE
75
+ $stderr.puts 'Updating xliff file'
76
+ end
77
+ send_request(master_file_for_locale_request(@xliff_file_id, file, override))
80
78
  push_master_plurals(plurals_file, override) if not plurals_file.nil?
81
79
  end
82
80
 
83
81
  def pull(locale)
84
82
  # downloading master xliff file
85
83
  data = {}
86
- res = http.request(Net::HTTP::Get.new("/api/projects/#{@key}/files/#{@xliff_file_id}/locales/#{locale}"))
87
- raise JSON.parse(res.body)["error"] if !res.code.to_i.between?(200, 300)
84
+ res = send_request(Net::HTTP::Get.new("/api/projects/#{@key}/files/#{@xliff_file_id}/locales/#{locale}"))
88
85
  data['xliff'] = res.body
89
86
  # downloading master plurals file
90
87
  if !@plurals_file_id.nil?
91
- res = http.request(Net::HTTP::Get.new("/api/projects/#{@key}/files/#{@plurals_file_id}/locales/#{locale}"))
92
- raise JSON.parse(res.body)["error"] if !res.code.to_i.between?(200, 300)
88
+ res = send_request(Net::HTTP::Get.new("/api/projects/#{@key}/files/#{@plurals_file_id}/locales/#{locale}"))
93
89
  data['plurals'] = res.body
94
90
  end
95
91
  return data
@@ -0,0 +1,48 @@
1
+ require 'nokogiri'
2
+ require 'pathname'
3
+
4
+ module Xlocalize
5
+ class ::Nokogiri::XML::Document
6
+
7
+ def filter_not_target_files(target)
8
+ target_prefix = "#{target}/"
9
+ self.xpath("//xmlns:file").each { |node|
10
+ fname = node["original"]
11
+ node.remove if !fname.start_with?(target_prefix) || !fname.include?(".lproj/")
12
+ }
13
+ end
14
+
15
+ def filter_trans_units(prefix)
16
+ self.xpath("//xmlns:source").each { |node|
17
+ node.parent.remove if node.content.start_with?(prefix)
18
+ }
19
+ end
20
+
21
+ def filter_plurals(project)
22
+ plurals = {}
23
+ self.xpath("//xmlns:file").each { |node|
24
+ fname = node["original"]
25
+ next if !fname.end_with?(".strings")
26
+ fname_stringsdict = fname << 'dict'
27
+ file_full_path = Pathname.new(project).split.first.to_s << '/' << fname_stringsdict
28
+ next if !File.exist?(file_full_path)
29
+
30
+ translations = {}
31
+ Plist::parse_xml(file_full_path).each do |key, val|
32
+ transl = val["value"].select { |k, _| ['zero', 'one', 'two', 'few', 'many', 'other'].include?(k) }
33
+ translations[key] = transl
34
+ sel = 'body > trans-unit[id="' << key << '"]'
35
+ node.css(sel).remove
36
+ end
37
+ plurals[fname_stringsdict] = translations
38
+ }
39
+ return plurals
40
+ end
41
+
42
+ def filter_empty_files
43
+ self.xpath("//xmlns:body").each { |node|
44
+ node.parent.remove if node.elements.count == 0
45
+ }
46
+ end
47
+ end
48
+ end
data/lib/xlocalize.rb CHANGED
@@ -7,11 +7,7 @@ module Xlocalize
7
7
  class XlocalizeCLI
8
8
  include Commander::Methods
9
9
 
10
- def run
11
- program :name, 'Xlocalize'
12
- program :version, Xlocalize::VERSION
13
- program :description, Xlocalize::DESCRIPTION
14
-
10
+ def define_export_cmd
15
11
  command :export do |c|
16
12
  c.syntax = 'xlocalize export [options]'
17
13
  c.description = 'Export localized strings from Xcode project'
@@ -20,7 +16,7 @@ module Xlocalize
20
16
  c.option '--target STRING', String, 'Target in the project'
21
17
  c.option '--excl_prefix STRING', String, 'Exclude strings having specified prefix'
22
18
  c.option '--master_lang STRING', String, 'Master language of the project'
23
- c.action do |args, options|
19
+ c.action do |_, options|
24
20
  if options.project.nil? or
25
21
  options.target.nil? or
26
22
  options.excl_prefix.nil? or
@@ -32,13 +28,15 @@ module Xlocalize
32
28
  Executor.new.export_master(wti, options.project, options.target, options.excl_prefix, options.master_lang)
33
29
  end
34
30
  end
31
+ end
35
32
 
33
+ def define_download_cmd
36
34
  command :download do |c|
37
35
  c.syntax = 'xlocalize download [options]'
38
36
  c.description = 'Download localized strings from WebtranslateIt project'
39
37
  c.option '--wti_key STRING', String, 'Webtranslateit API key'
40
38
  c.option '--locales ARRAY', Array, 'Locales to download'
41
- c.action do |args, options|
39
+ c.action do |_, options|
42
40
  if options.wti_key.nil? or
43
41
  options.locales.nil?
44
42
  raise 'Missing parameter'
@@ -47,12 +45,14 @@ module Xlocalize
47
45
  Executor.new.download(WebtranslateIt.new(options.wti_key), options.locales)
48
46
  end
49
47
  end
48
+ end
50
49
 
50
+ def define_import_cmd
51
51
  command :import do |c|
52
52
  c.syntax = 'xlocalize import [options]'
53
53
  c.description = 'Import localized strings to Xcode project'
54
54
  c.option '--locales ARRAY', Array, 'Locales to import'
55
- c.action do |args, options|
55
+ c.action do |_, options|
56
56
  if options.locales.nil?
57
57
  raise 'Missing parameter'
58
58
  end
@@ -60,7 +60,17 @@ module Xlocalize
60
60
  Executor.new.import(options.locales)
61
61
  end
62
62
  end
63
+ end
64
+
65
+ def run
66
+ program :name, 'Xlocalize'
67
+ program :version, Xlocalize::VERSION
68
+ program :description, Xlocalize::DESCRIPTION
63
69
 
70
+ define_export_cmd
71
+ define_download_cmd
72
+ define_import_cmd
73
+
64
74
  run!
65
75
  end
66
76
  end
data/xlocalize.gemspec CHANGED
@@ -19,13 +19,14 @@ Gem::Specification.new do |spec|
19
19
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
20
20
  spec.require_paths = ["lib"]
21
21
 
22
- spec.add_runtime_dependency 'nokogiri', '~> 1.6'
22
+ spec.add_runtime_dependency 'nokogiri', '= 1.6'
23
23
  spec.add_runtime_dependency 'commander', '~> 4.4'
24
24
  spec.add_runtime_dependency 'colorize', '~> 0.8'
25
25
  spec.add_runtime_dependency 'plist', '~> 3.2'
26
26
  spec.add_runtime_dependency 'multipart-post', '~> 2.0'
27
27
 
28
28
  spec.add_development_dependency 'bundler', '~> 1.10'
29
- spec.add_development_dependency 'rake', '~> 10.0'
30
29
  spec.add_development_dependency 'rspec', '~> 3.5'
30
+ spec.add_development_dependency 'simplecov', '~> 0.13'
31
+ spec.add_development_dependency 'codeclimate-test-reporter', '~> 1.0'
31
32
  end
metadata CHANGED
@@ -1,27 +1,27 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xlocalize
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Viktoras Laukevičius
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-02-17 00:00:00.000000000 Z
11
+ date: 2017-02-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - '='
18
18
  - !ruby/object:Gem::Version
19
19
  version: '1.6'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - '='
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.6'
27
27
  - !ruby/object:Gem::Dependency
@@ -95,33 +95,47 @@ dependencies:
95
95
  - !ruby/object:Gem::Version
96
96
  version: '1.10'
97
97
  - !ruby/object:Gem::Dependency
98
- name: rake
98
+ name: rspec
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: '10.0'
103
+ version: '3.5'
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: '10.0'
110
+ version: '3.5'
111
111
  - !ruby/object:Gem::Dependency
112
- name: rspec
112
+ name: simplecov
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
115
  - - "~>"
116
116
  - !ruby/object:Gem::Version
117
- version: '3.5'
117
+ version: '0.13'
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
- version: '3.5'
124
+ version: '0.13'
125
+ - !ruby/object:Gem::Dependency
126
+ name: codeclimate-test-reporter
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: '1.0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '1.0'
125
139
  description:
126
140
  email:
127
141
  - viktoras.laukevicius@yahoo.com
@@ -133,6 +147,7 @@ extensions: []
133
147
  extra_rdoc_files: []
134
148
  files:
135
149
  - ".gitignore"
150
+ - ".travis.yml"
136
151
  - CODE_OF_CONDUCT.md
137
152
  - Gemfile
138
153
  - LICENSE.txt
@@ -145,6 +160,7 @@ files:
145
160
  - lib/xlocalize/executor.rb
146
161
  - lib/xlocalize/version.rb
147
162
  - lib/xlocalize/webtranslateit.rb
163
+ - lib/xlocalize/xliff.rb
148
164
  - xlocalize.gemspec
149
165
  homepage: https://github.com/viktorasl/xlocalize
150
166
  licenses:
@@ -166,7 +182,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
166
182
  version: '0'
167
183
  requirements: []
168
184
  rubyforge_project:
169
- rubygems_version: 2.5.1
185
+ rubygems_version: 2.6.8
170
186
  signing_key:
171
187
  specification_version: 4
172
188
  summary: Xcode localizations import/export helper tool