ad_localize 5.0.0 → 6.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/ruby.yml +6 -3
- data/.rubocop.yml +5 -0
- data/.rubocop_todo.yml +319 -0
- data/CHANGELOG.md +24 -0
- data/Gemfile +1 -0
- data/Gemfile.lock +54 -48
- data/README.md +32 -10
- data/Rakefile +1 -0
- data/ad_localize.gemspec +10 -9
- data/bin/console +1 -0
- data/exe/ad_localize +2 -1
- data/lib/ad_localize/ad_logger.rb +5 -10
- data/lib/ad_localize/cli.rb +10 -3
- data/lib/ad_localize/entities/key.rb +3 -76
- data/lib/ad_localize/entities/locale_wording.rb +32 -52
- data/lib/ad_localize/entities/platform.rb +13 -0
- data/lib/ad_localize/entities/simple_wording.rb +6 -0
- data/lib/ad_localize/entities/wording_type.rb +11 -0
- data/lib/ad_localize/interactors/base_generate_files.rb +37 -0
- data/lib/ad_localize/interactors/download_spreadsheets.rb +20 -0
- data/lib/ad_localize/interactors/export_wording.rb +26 -20
- data/lib/ad_localize/interactors/generate_info_plist.rb +24 -0
- data/lib/ad_localize/interactors/generate_ios_files.rb +12 -0
- data/lib/ad_localize/interactors/generate_json.rb +20 -0
- data/lib/ad_localize/interactors/generate_localizable_strings.rb +24 -0
- data/lib/ad_localize/interactors/generate_localizable_strings_dict.rb +24 -0
- data/lib/ad_localize/interactors/generate_properties.rb +20 -0
- data/lib/ad_localize/interactors/generate_strings.rb +25 -0
- data/lib/ad_localize/interactors/generate_yaml.rb +20 -0
- data/lib/ad_localize/interactors/merge_wordings.rb +49 -18
- data/lib/ad_localize/interactors/parse_csv_files.rb +22 -0
- data/lib/ad_localize/interactors/process_export_request.rb +21 -0
- data/lib/ad_localize/mappers/locale_wording_to_hash.rb +45 -24
- data/lib/ad_localize/mappers/options_to_export_request.rb +14 -22
- data/lib/ad_localize/option_handler.rb +50 -27
- data/lib/ad_localize/parsers/csv_parser.rb +84 -0
- data/lib/ad_localize/parsers/key_parser.rb +62 -0
- data/lib/ad_localize/repositories/drive_repository.rb +53 -0
- data/lib/ad_localize/repositories/file_system_repository.rb +2 -1
- data/lib/ad_localize/requests/export_request.rb +95 -57
- data/lib/ad_localize/sanitizers/ios_sanitizer.rb +12 -0
- data/lib/ad_localize/{mappers/android_translation_mapper.rb → sanitizers/ios_to_android_sanitizer.rb} +8 -8
- data/lib/ad_localize/sanitizers/pass_through_sanitizer.rb +10 -0
- data/lib/ad_localize/serializers/info_plist_serializer.rb +9 -11
- data/lib/ad_localize/serializers/json_serializer.rb +3 -5
- data/lib/ad_localize/serializers/localizable_strings_serializer.rb +9 -15
- data/lib/ad_localize/serializers/localizable_stringsdict_serializer.rb +12 -25
- data/lib/ad_localize/serializers/properties_serializer.rb +9 -11
- data/lib/ad_localize/serializers/strings_serializer.rb +12 -21
- data/lib/ad_localize/serializers/templated_serializer.rb +51 -0
- data/lib/ad_localize/serializers/yaml_serializer.rb +4 -6
- data/lib/ad_localize/templates/android/strings.xml.erb +6 -6
- data/lib/ad_localize/templates/ios/Localizable.stringsdict.erb +14 -14
- data/lib/ad_localize/version.rb +2 -1
- data/lib/ad_localize/view_models/compound_wording_view_model.rb +2 -0
- data/lib/ad_localize/view_models/simple_wording_view_model.rb +2 -0
- data/lib/ad_localize.rb +33 -35
- metadata +70 -47
- data/lib/ad_localize/constant.rb +0 -6
- data/lib/ad_localize/entities/translation.rb +0 -32
- data/lib/ad_localize/entities/wording.rb +0 -24
- data/lib/ad_localize/interactors/execute_export_request.rb +0 -45
- data/lib/ad_localize/interactors/export_csv_files.rb +0 -20
- data/lib/ad_localize/interactors/export_g_spreadsheet.rb +0 -64
- data/lib/ad_localize/interactors/platforms/export_android_locale_wording.rb +0 -44
- data/lib/ad_localize/interactors/platforms/export_csv_locale_wording.rb +0 -22
- data/lib/ad_localize/interactors/platforms/export_ios_locale_wording.rb +0 -75
- data/lib/ad_localize/interactors/platforms/export_json_locale_wording.rb +0 -27
- data/lib/ad_localize/interactors/platforms/export_platform_factory.rb +0 -50
- data/lib/ad_localize/interactors/platforms/export_properties_locale_wording.rb +0 -32
- data/lib/ad_localize/interactors/platforms/export_yaml_locale_wording.rb +0 -27
- data/lib/ad_localize/mappers/csv_path_to_wording.rb +0 -73
- data/lib/ad_localize/mappers/ios_translation_mapper.rb +0 -12
- data/lib/ad_localize/mappers/translation_group_mapper.rb +0 -14
- data/lib/ad_localize/mappers/translation_mapper.rb +0 -30
- data/lib/ad_localize/mappers/value_range_to_wording.rb +0 -67
- data/lib/ad_localize/repositories/g_sheets_repository.rb +0 -44
- data/lib/ad_localize/requests/export_wording_options.rb +0 -24
- data/lib/ad_localize/requests/g_spreadsheet_options.rb +0 -47
- data/lib/ad_localize/requests/merge_policy.rb +0 -28
- data/lib/ad_localize/serializers/with_template.rb +0 -19
- data/lib/ad_localize/validators/key_validator.rb +0 -31
- data/lib/ad_localize/view_models/translation_group_view_model.rb +0 -19
- data/lib/ad_localize/view_models/translation_view_model.rb +0 -23
data/lib/ad_localize.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
require 'active_support'
|
2
3
|
require 'active_support/core_ext'
|
3
4
|
require 'fileutils'
|
@@ -8,56 +9,49 @@ require 'csv'
|
|
8
9
|
require 'logger'
|
9
10
|
require 'colorize'
|
10
11
|
require 'optparse'
|
11
|
-
require 'nokogiri'
|
12
12
|
require 'erb'
|
13
13
|
require 'googleauth'
|
14
14
|
require 'google/apis/sheets_v4'
|
15
|
+
require 'google/apis/drive_v3'
|
15
16
|
|
16
|
-
require 'ad_localize/
|
17
|
-
require 'ad_localize/ad_logger'
|
18
|
-
require 'ad_localize/constant'
|
19
|
-
require 'ad_localize/cli'
|
20
|
-
require 'ad_localize/option_handler'
|
21
|
-
|
22
|
-
require 'ad_localize/repositories/g_sheets_repository'
|
17
|
+
require 'ad_localize/repositories/drive_repository'
|
23
18
|
require 'ad_localize/repositories/file_system_repository'
|
24
19
|
|
25
|
-
require 'ad_localize/view_models/
|
26
|
-
require 'ad_localize/view_models/
|
20
|
+
require 'ad_localize/view_models/simple_wording_view_model'
|
21
|
+
require 'ad_localize/view_models/compound_wording_view_model'
|
22
|
+
|
23
|
+
require 'ad_localize/parsers/key_parser'
|
24
|
+
require 'ad_localize/parsers/csv_parser'
|
27
25
|
|
28
26
|
require 'ad_localize/mappers/options_to_export_request'
|
29
|
-
require 'ad_localize/mappers/csv_path_to_wording'
|
30
27
|
require 'ad_localize/mappers/locale_wording_to_hash'
|
31
|
-
require 'ad_localize/mappers/value_range_to_wording'
|
32
|
-
require 'ad_localize/mappers/translation_mapper'
|
33
|
-
require 'ad_localize/mappers/translation_group_mapper'
|
34
|
-
require 'ad_localize/mappers/android_translation_mapper'
|
35
|
-
require 'ad_localize/mappers/ios_translation_mapper'
|
36
28
|
|
37
29
|
require 'ad_localize/entities/key'
|
38
|
-
require 'ad_localize/entities/translation'
|
39
30
|
require 'ad_localize/entities/locale_wording'
|
40
|
-
require 'ad_localize/entities/
|
41
|
-
|
42
|
-
require 'ad_localize/
|
43
|
-
require 'ad_localize/requests/export_request'
|
44
|
-
require 'ad_localize/requests/export_wording_options'
|
45
|
-
require 'ad_localize/requests/merge_policy'
|
31
|
+
require 'ad_localize/entities/platform'
|
32
|
+
require 'ad_localize/entities/simple_wording'
|
33
|
+
require 'ad_localize/entities/wording_type'
|
46
34
|
|
35
|
+
require 'ad_localize/interactors/base_generate_files'
|
36
|
+
require 'ad_localize/interactors/process_export_request'
|
37
|
+
require 'ad_localize/interactors/parse_csv_files'
|
38
|
+
require 'ad_localize/interactors/download_spreadsheets'
|
47
39
|
require 'ad_localize/interactors/merge_wordings'
|
48
|
-
require 'ad_localize/interactors/execute_export_request'
|
49
|
-
require 'ad_localize/interactors/export_csv_files'
|
50
|
-
require 'ad_localize/interactors/export_g_spreadsheet'
|
51
40
|
require 'ad_localize/interactors/export_wording'
|
52
|
-
require 'ad_localize/interactors/
|
53
|
-
require 'ad_localize/interactors/
|
54
|
-
require 'ad_localize/interactors/
|
55
|
-
require 'ad_localize/interactors/
|
56
|
-
require 'ad_localize/interactors/
|
57
|
-
require 'ad_localize/interactors/
|
58
|
-
require 'ad_localize/interactors/
|
41
|
+
require 'ad_localize/interactors/generate_info_plist'
|
42
|
+
require 'ad_localize/interactors/generate_ios_files'
|
43
|
+
require 'ad_localize/interactors/generate_json'
|
44
|
+
require 'ad_localize/interactors/generate_localizable_strings'
|
45
|
+
require 'ad_localize/interactors/generate_localizable_strings_dict'
|
46
|
+
require 'ad_localize/interactors/generate_properties'
|
47
|
+
require 'ad_localize/interactors/generate_strings'
|
48
|
+
require 'ad_localize/interactors/generate_yaml'
|
49
|
+
|
50
|
+
require 'ad_localize/sanitizers/ios_sanitizer'
|
51
|
+
require 'ad_localize/sanitizers/ios_to_android_sanitizer'
|
52
|
+
require 'ad_localize/sanitizers/pass_through_sanitizer'
|
59
53
|
|
60
|
-
require 'ad_localize/serializers/
|
54
|
+
require 'ad_localize/serializers/templated_serializer'
|
61
55
|
require 'ad_localize/serializers/info_plist_serializer'
|
62
56
|
require 'ad_localize/serializers/localizable_strings_serializer'
|
63
57
|
require 'ad_localize/serializers/localizable_stringsdict_serializer'
|
@@ -66,7 +60,11 @@ require 'ad_localize/serializers/properties_serializer'
|
|
66
60
|
require 'ad_localize/serializers/json_serializer'
|
67
61
|
require 'ad_localize/serializers/yaml_serializer'
|
68
62
|
|
69
|
-
require 'ad_localize/
|
63
|
+
require 'ad_localize/requests/export_request'
|
64
|
+
require 'ad_localize/option_handler'
|
65
|
+
require 'ad_localize/cli'
|
66
|
+
require 'ad_localize/version'
|
67
|
+
require 'ad_localize/ad_logger'
|
70
68
|
|
71
69
|
module AdLocalize
|
72
70
|
class Error < StandardError; end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ad_localize
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 6.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Edouard Siegel
|
@@ -21,7 +21,7 @@ authors:
|
|
21
21
|
autorequire:
|
22
22
|
bindir: exe
|
23
23
|
cert_chain: []
|
24
|
-
date:
|
24
|
+
date: 2023-07-17 00:00:00.000000000 Z
|
25
25
|
dependencies:
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: bundler
|
@@ -106,39 +106,59 @@ dependencies:
|
|
106
106
|
- !ruby/object:Gem::Version
|
107
107
|
version: '3.3'
|
108
108
|
- !ruby/object:Gem::Dependency
|
109
|
-
name:
|
109
|
+
name: debug
|
110
110
|
requirement: !ruby/object:Gem::Requirement
|
111
111
|
requirements:
|
112
112
|
- - ">="
|
113
113
|
- !ruby/object:Gem::Version
|
114
|
-
version:
|
114
|
+
version: 1.0.0
|
115
115
|
- - "<"
|
116
116
|
- !ruby/object:Gem::Version
|
117
|
-
version: '
|
118
|
-
type: :
|
117
|
+
version: '2.0'
|
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:
|
124
|
+
version: 1.0.0
|
125
125
|
- - "<"
|
126
126
|
- !ruby/object:Gem::Version
|
127
|
-
version: '
|
127
|
+
version: '2.0'
|
128
128
|
- !ruby/object:Gem::Dependency
|
129
|
-
name:
|
129
|
+
name: rubocop
|
130
130
|
requirement: !ruby/object:Gem::Requirement
|
131
131
|
requirements:
|
132
132
|
- - "~>"
|
133
133
|
- !ruby/object:Gem::Version
|
134
|
-
version: '1.
|
135
|
-
type: :
|
134
|
+
version: '1.0'
|
135
|
+
type: :development
|
136
136
|
prerelease: false
|
137
137
|
version_requirements: !ruby/object:Gem::Requirement
|
138
138
|
requirements:
|
139
139
|
- - "~>"
|
140
140
|
- !ruby/object:Gem::Version
|
141
|
-
version: '1.
|
141
|
+
version: '1.0'
|
142
|
+
- !ruby/object:Gem::Dependency
|
143
|
+
name: activesupport
|
144
|
+
requirement: !ruby/object:Gem::Requirement
|
145
|
+
requirements:
|
146
|
+
- - ">="
|
147
|
+
- !ruby/object:Gem::Version
|
148
|
+
version: 6.1.3.2
|
149
|
+
- - "<"
|
150
|
+
- !ruby/object:Gem::Version
|
151
|
+
version: '8.0'
|
152
|
+
type: :runtime
|
153
|
+
prerelease: false
|
154
|
+
version_requirements: !ruby/object:Gem::Requirement
|
155
|
+
requirements:
|
156
|
+
- - ">="
|
157
|
+
- !ruby/object:Gem::Version
|
158
|
+
version: 6.1.3.2
|
159
|
+
- - "<"
|
160
|
+
- !ruby/object:Gem::Version
|
161
|
+
version: '8.0'
|
142
162
|
- !ruby/object:Gem::Dependency
|
143
163
|
name: colorize
|
144
164
|
requirement: !ruby/object:Gem::Requirement
|
@@ -154,33 +174,33 @@ dependencies:
|
|
154
174
|
- !ruby/object:Gem::Version
|
155
175
|
version: '0.8'
|
156
176
|
- !ruby/object:Gem::Dependency
|
157
|
-
name:
|
177
|
+
name: google-apis-sheets_v4
|
158
178
|
requirement: !ruby/object:Gem::Requirement
|
159
179
|
requirements:
|
160
180
|
- - "~>"
|
161
181
|
- !ruby/object:Gem::Version
|
162
|
-
version: '0.
|
182
|
+
version: '0.9'
|
163
183
|
type: :runtime
|
164
184
|
prerelease: false
|
165
185
|
version_requirements: !ruby/object:Gem::Requirement
|
166
186
|
requirements:
|
167
187
|
- - "~>"
|
168
188
|
- !ruby/object:Gem::Version
|
169
|
-
version: '0.
|
189
|
+
version: '0.9'
|
170
190
|
- !ruby/object:Gem::Dependency
|
171
|
-
name: google-apis-
|
191
|
+
name: google-apis-drive_v3
|
172
192
|
requirement: !ruby/object:Gem::Requirement
|
173
193
|
requirements:
|
174
194
|
- - "~>"
|
175
195
|
- !ruby/object:Gem::Version
|
176
|
-
version:
|
196
|
+
version: 0.33.0
|
177
197
|
type: :runtime
|
178
198
|
prerelease: false
|
179
199
|
version_requirements: !ruby/object:Gem::Requirement
|
180
200
|
requirements:
|
181
201
|
- - "~>"
|
182
202
|
- !ruby/object:Gem::Version
|
183
|
-
version:
|
203
|
+
version: 0.33.0
|
184
204
|
description: |-
|
185
205
|
AdLocalize produces localization files from platform agnostic wording.
|
186
206
|
Supported wording format : CSV. Supported export format: iOS, Android, JSON and YAML
|
@@ -195,6 +215,8 @@ extra_rdoc_files: []
|
|
195
215
|
files:
|
196
216
|
- ".github/workflows/ruby.yml"
|
197
217
|
- ".gitignore"
|
218
|
+
- ".rubocop.yml"
|
219
|
+
- ".rubocop_todo.yml"
|
198
220
|
- ".travis.yml"
|
199
221
|
- CHANGELOG.md
|
200
222
|
- CODE_OF_CONDUCT.md
|
@@ -211,59 +233,57 @@ files:
|
|
211
233
|
- lib/ad_localize.rb
|
212
234
|
- lib/ad_localize/ad_logger.rb
|
213
235
|
- lib/ad_localize/cli.rb
|
214
|
-
- lib/ad_localize/constant.rb
|
215
236
|
- lib/ad_localize/entities/key.rb
|
216
237
|
- lib/ad_localize/entities/locale_wording.rb
|
217
|
-
- lib/ad_localize/entities/
|
218
|
-
- lib/ad_localize/entities/
|
219
|
-
- lib/ad_localize/
|
220
|
-
- lib/ad_localize/interactors/
|
221
|
-
- lib/ad_localize/interactors/
|
238
|
+
- lib/ad_localize/entities/platform.rb
|
239
|
+
- lib/ad_localize/entities/simple_wording.rb
|
240
|
+
- lib/ad_localize/entities/wording_type.rb
|
241
|
+
- lib/ad_localize/interactors/base_generate_files.rb
|
242
|
+
- lib/ad_localize/interactors/download_spreadsheets.rb
|
222
243
|
- lib/ad_localize/interactors/export_wording.rb
|
244
|
+
- lib/ad_localize/interactors/generate_info_plist.rb
|
245
|
+
- lib/ad_localize/interactors/generate_ios_files.rb
|
246
|
+
- lib/ad_localize/interactors/generate_json.rb
|
247
|
+
- lib/ad_localize/interactors/generate_localizable_strings.rb
|
248
|
+
- lib/ad_localize/interactors/generate_localizable_strings_dict.rb
|
249
|
+
- lib/ad_localize/interactors/generate_properties.rb
|
250
|
+
- lib/ad_localize/interactors/generate_strings.rb
|
251
|
+
- lib/ad_localize/interactors/generate_yaml.rb
|
223
252
|
- lib/ad_localize/interactors/merge_wordings.rb
|
224
|
-
- lib/ad_localize/interactors/
|
225
|
-
- lib/ad_localize/interactors/
|
226
|
-
- lib/ad_localize/interactors/platforms/export_ios_locale_wording.rb
|
227
|
-
- lib/ad_localize/interactors/platforms/export_json_locale_wording.rb
|
228
|
-
- lib/ad_localize/interactors/platforms/export_platform_factory.rb
|
229
|
-
- lib/ad_localize/interactors/platforms/export_properties_locale_wording.rb
|
230
|
-
- lib/ad_localize/interactors/platforms/export_yaml_locale_wording.rb
|
231
|
-
- lib/ad_localize/mappers/android_translation_mapper.rb
|
232
|
-
- lib/ad_localize/mappers/csv_path_to_wording.rb
|
233
|
-
- lib/ad_localize/mappers/ios_translation_mapper.rb
|
253
|
+
- lib/ad_localize/interactors/parse_csv_files.rb
|
254
|
+
- lib/ad_localize/interactors/process_export_request.rb
|
234
255
|
- lib/ad_localize/mappers/locale_wording_to_hash.rb
|
235
256
|
- lib/ad_localize/mappers/options_to_export_request.rb
|
236
|
-
- lib/ad_localize/mappers/translation_group_mapper.rb
|
237
|
-
- lib/ad_localize/mappers/translation_mapper.rb
|
238
|
-
- lib/ad_localize/mappers/value_range_to_wording.rb
|
239
257
|
- lib/ad_localize/option_handler.rb
|
258
|
+
- lib/ad_localize/parsers/csv_parser.rb
|
259
|
+
- lib/ad_localize/parsers/key_parser.rb
|
260
|
+
- lib/ad_localize/repositories/drive_repository.rb
|
240
261
|
- lib/ad_localize/repositories/file_system_repository.rb
|
241
|
-
- lib/ad_localize/repositories/g_sheets_repository.rb
|
242
262
|
- lib/ad_localize/requests/export_request.rb
|
243
|
-
- lib/ad_localize/
|
244
|
-
- lib/ad_localize/
|
245
|
-
- lib/ad_localize/
|
263
|
+
- lib/ad_localize/sanitizers/ios_sanitizer.rb
|
264
|
+
- lib/ad_localize/sanitizers/ios_to_android_sanitizer.rb
|
265
|
+
- lib/ad_localize/sanitizers/pass_through_sanitizer.rb
|
246
266
|
- lib/ad_localize/serializers/info_plist_serializer.rb
|
247
267
|
- lib/ad_localize/serializers/json_serializer.rb
|
248
268
|
- lib/ad_localize/serializers/localizable_strings_serializer.rb
|
249
269
|
- lib/ad_localize/serializers/localizable_stringsdict_serializer.rb
|
250
270
|
- lib/ad_localize/serializers/properties_serializer.rb
|
251
271
|
- lib/ad_localize/serializers/strings_serializer.rb
|
252
|
-
- lib/ad_localize/serializers/
|
272
|
+
- lib/ad_localize/serializers/templated_serializer.rb
|
253
273
|
- lib/ad_localize/serializers/yaml_serializer.rb
|
254
274
|
- lib/ad_localize/templates/android/strings.xml.erb
|
255
275
|
- lib/ad_localize/templates/ios/InfoPlist.strings.erb
|
256
276
|
- lib/ad_localize/templates/ios/Localizable.strings.erb
|
257
277
|
- lib/ad_localize/templates/ios/Localizable.stringsdict.erb
|
258
278
|
- lib/ad_localize/templates/properties/template.properties.erb
|
259
|
-
- lib/ad_localize/validators/key_validator.rb
|
260
279
|
- lib/ad_localize/version.rb
|
261
|
-
- lib/ad_localize/view_models/
|
262
|
-
- lib/ad_localize/view_models/
|
280
|
+
- lib/ad_localize/view_models/compound_wording_view_model.rb
|
281
|
+
- lib/ad_localize/view_models/simple_wording_view_model.rb
|
263
282
|
homepage: https://github.com/applidium/ad_localize
|
264
283
|
licenses:
|
265
284
|
- MIT
|
266
|
-
metadata:
|
285
|
+
metadata:
|
286
|
+
rubygems_mfa_required: 'true'
|
267
287
|
post_install_message:
|
268
288
|
rdoc_options: []
|
269
289
|
require_paths:
|
@@ -273,13 +293,16 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
273
293
|
- - ">="
|
274
294
|
- !ruby/object:Gem::Version
|
275
295
|
version: '2.7'
|
296
|
+
- - "<"
|
297
|
+
- !ruby/object:Gem::Version
|
298
|
+
version: '4.0'
|
276
299
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
277
300
|
requirements:
|
278
301
|
- - ">="
|
279
302
|
- !ruby/object:Gem::Version
|
280
303
|
version: '0'
|
281
304
|
requirements: []
|
282
|
-
rubygems_version: 3.
|
305
|
+
rubygems_version: 3.3.7
|
283
306
|
signing_key:
|
284
307
|
specification_version: 4
|
285
308
|
summary: AdLocalize helps with mobile and web applications wording
|
data/lib/ad_localize/constant.rb
DELETED
@@ -1,32 +0,0 @@
|
|
1
|
-
module AdLocalize
|
2
|
-
module Entities
|
3
|
-
class Translation
|
4
|
-
attr_reader(
|
5
|
-
:locale,
|
6
|
-
:key,
|
7
|
-
:comment
|
8
|
-
)
|
9
|
-
|
10
|
-
attr_accessor(:value)
|
11
|
-
|
12
|
-
def initialize(locale:, key:, value:, comment: nil)
|
13
|
-
@locale = locale
|
14
|
-
@key = key
|
15
|
-
@value = value
|
16
|
-
@comment = comment
|
17
|
-
end
|
18
|
-
|
19
|
-
def ==(o)
|
20
|
-
o.class == self.class &&
|
21
|
-
o.locale == locale &&
|
22
|
-
o.key == key &&
|
23
|
-
o.value == value &&
|
24
|
-
o.comment == comment
|
25
|
-
end
|
26
|
-
|
27
|
-
def has_value?
|
28
|
-
value.present?
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
@@ -1,24 +0,0 @@
|
|
1
|
-
module AdLocalize
|
2
|
-
module Entities
|
3
|
-
class Wording
|
4
|
-
attr_reader(:default_locale, :locale_wordings)
|
5
|
-
|
6
|
-
def initialize(locale_wordings:, default_locale:)
|
7
|
-
@locale_wordings = locale_wordings
|
8
|
-
@default_locale = default_locale
|
9
|
-
end
|
10
|
-
|
11
|
-
def translations_for(locale:)
|
12
|
-
@locale_wordings.find { |locale_wording| locale_wording.locale == locale }
|
13
|
-
end
|
14
|
-
|
15
|
-
def locales
|
16
|
-
@locale_wordings.map(&:locale)
|
17
|
-
end
|
18
|
-
|
19
|
-
def default_locale?(locale:)
|
20
|
-
locale == @default_locale
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
@@ -1,45 +0,0 @@
|
|
1
|
-
module AdLocalize
|
2
|
-
module Interactors
|
3
|
-
class ExecuteExportRequest
|
4
|
-
def initialize(csv_path_to_wording: nil, value_range_to_wording: nil)
|
5
|
-
@csv_path_to_wording = csv_path_to_wording
|
6
|
-
@value_range_to_wording = value_range_to_wording
|
7
|
-
end
|
8
|
-
|
9
|
-
def call(export_request:)
|
10
|
-
export_request.verbose? ? LOGGER.debug! : LOGGER.info!
|
11
|
-
print_export_request(export_request: export_request) if export_request.verbose?
|
12
|
-
LOGGER.debug("Checking request validity")
|
13
|
-
return unless export_request.valid?
|
14
|
-
|
15
|
-
if export_request.has_csv_files?
|
16
|
-
ExportCSVFiles.new(csv_path_to_wording: @csv_path_to_wording).call(export_request: export_request)
|
17
|
-
elsif export_request.has_g_spreadsheet_options?
|
18
|
-
ExportGSpreadsheet.new(value_range_to_wording: @value_range_to_wording).call(export_request: export_request)
|
19
|
-
end
|
20
|
-
LOGGER.debug("End of export request execution")
|
21
|
-
end
|
22
|
-
|
23
|
-
private
|
24
|
-
|
25
|
-
def print_export_request(export_request:)
|
26
|
-
LOGGER.debug("Export Request info")
|
27
|
-
LOGGER.debug("locales : #{export_request.locales.to_sentence}")
|
28
|
-
LOGGER.debug("platforms : #{export_request.platforms.to_sentence}")
|
29
|
-
LOGGER.debug("output_path : #{export_request.output_path}")
|
30
|
-
LOGGER.debug("verbose : #{export_request.verbose}")
|
31
|
-
LOGGER.debug("non_empty_values : #{export_request.non_empty_values}")
|
32
|
-
LOGGER.debug("merge_policy : #{export_request.merge_policy&.policy}")
|
33
|
-
LOGGER.debug("csv_paths : #{export_request.csv_paths.to_sentence}")
|
34
|
-
if export_request.has_g_spreadsheet_options?
|
35
|
-
g_options = export_request.g_spreadsheet_options
|
36
|
-
LOGGER.debug("spreadsheet_id : #{g_options.spreadsheet_id}")
|
37
|
-
LOGGER.debug("sheet_ids : #{g_options.sheet_ids.to_sentence}")
|
38
|
-
LOGGER.debug("export_all: #{g_options.export_all}")
|
39
|
-
LOGGER.debug("service_account: #{g_options.service_account_config.present?}")
|
40
|
-
end
|
41
|
-
LOGGER.debug("End Export Request info")
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
@@ -1,20 +0,0 @@
|
|
1
|
-
module AdLocalize
|
2
|
-
module Interactors
|
3
|
-
class ExportCSVFiles
|
4
|
-
def initialize(csv_path_to_wording: nil)
|
5
|
-
@csv_path_to_wording = csv_path_to_wording.presence || Mappers::CSVPathToWording.new
|
6
|
-
@merge_wordings = MergeWordings.new
|
7
|
-
@export_wording = ExportWording.new
|
8
|
-
end
|
9
|
-
|
10
|
-
def call(export_request:)
|
11
|
-
LOGGER.debug("Starting export csv files : #{export_request.csv_paths.to_sentence}")
|
12
|
-
wordings = export_request.csv_paths.map { |csv_path| @csv_path_to_wording.map(csv_path: csv_path) }.compact
|
13
|
-
return if wordings.blank?
|
14
|
-
|
15
|
-
wording = @merge_wordings.call(wordings: wordings, merge_policy: export_request.merge_policy)
|
16
|
-
@export_wording.call(export_request: export_request, wording: wording)
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
@@ -1,64 +0,0 @@
|
|
1
|
-
module AdLocalize
|
2
|
-
module Interactors
|
3
|
-
class ExportGSpreadsheet
|
4
|
-
def initialize(value_range_to_wording: nil)
|
5
|
-
@value_range_to_wording = value_range_to_wording.presence || Mappers::ValueRangeToWording.new
|
6
|
-
@g_sheets_repository = Repositories::GSheetsRepository.new
|
7
|
-
@export_wording = ExportWording.new
|
8
|
-
@merge_wordings = MergeWordings.new
|
9
|
-
@export_csv_files = ExportCSVFiles.new
|
10
|
-
end
|
11
|
-
|
12
|
-
def call(export_request:)
|
13
|
-
LOGGER.debug("Starting export google spreadsheet")
|
14
|
-
if export_request.g_spreadsheet_options.service_account_config
|
15
|
-
export_with_service_account(export_request: export_request)
|
16
|
-
else
|
17
|
-
export_without_service_account(export_request: export_request)
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
private
|
22
|
-
|
23
|
-
def export_with_service_account(export_request:)
|
24
|
-
LOGGER.debug("Using service account")
|
25
|
-
value_ranges = @g_sheets_repository.get_sheets_values(g_spreadsheet_options: export_request.g_spreadsheet_options)
|
26
|
-
wordings = value_ranges.map { |value_range| @value_range_to_wording.map(value_range: value_range) }.compact
|
27
|
-
return if wordings.blank?
|
28
|
-
|
29
|
-
wording = @merge_wordings.call(wordings: wordings, merge_policy: export_request.merge_policy)
|
30
|
-
@export_wording.call(export_request: export_request, wording: wording)
|
31
|
-
end
|
32
|
-
|
33
|
-
def export_without_service_account(export_request:)
|
34
|
-
LOGGER.debug("Using direct access to spreadsheet")
|
35
|
-
downloaded_files = export_request.g_spreadsheet_options.public_download_urls.map do |sheet_download_url|
|
36
|
-
download_public_sheet(url: sheet_download_url)
|
37
|
-
end
|
38
|
-
export_request.csv_paths = downloaded_files.map(&:path)
|
39
|
-
if export_request.has_csv_files?
|
40
|
-
@export_csv_files.call(export_request: export_request)
|
41
|
-
elsif export_request.has_empty_files?
|
42
|
-
# When downloading an empty spreadsheet, the content type of the downloaded file is "inode/x-empty"
|
43
|
-
LOGGER.warn("Your spreadsheet is empty. Add content and retry.")
|
44
|
-
else
|
45
|
-
# When shared configuration is misconfigured, the content type of the downloaded file is "text/html"
|
46
|
-
LOGGER.error("Invalid export request. Check the spreadsheet share configuration")
|
47
|
-
end
|
48
|
-
downloaded_files.select { |downloaded_file| File.exist?(downloaded_file.path) }.each do |downloaded_file|
|
49
|
-
downloaded_file.close
|
50
|
-
downloaded_file.unlink
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
def download_public_sheet(url:)
|
55
|
-
tempfile = Tempfile.new
|
56
|
-
URI.open(url) do |uri_io|
|
57
|
-
tempfile.write uri_io.read
|
58
|
-
tempfile.rewind
|
59
|
-
end
|
60
|
-
tempfile
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
@@ -1,44 +0,0 @@
|
|
1
|
-
module AdLocalize
|
2
|
-
module Interactors
|
3
|
-
module Platforms
|
4
|
-
class ExportAndroidLocaleWording
|
5
|
-
STRINGS_FILENAME = 'strings.xml'.freeze
|
6
|
-
LOCALE_DIRECTORY_CONVENTION = "values%{locale_suffix}".freeze
|
7
|
-
|
8
|
-
def initialize
|
9
|
-
@strings_serializer = Serializers::StringsSerializer.new
|
10
|
-
@file_system_repository = Repositories::FileSystemRepository.new
|
11
|
-
end
|
12
|
-
|
13
|
-
def call(export_wording_options:)
|
14
|
-
platform_dir = export_wording_options.platform_output_directory
|
15
|
-
wording = export_wording_options.wording
|
16
|
-
|
17
|
-
export_wording_options.locales.each do |locale|
|
18
|
-
LOGGER.debug("Starting export Android wording for locale #{locale}")
|
19
|
-
locale_wording = export_wording_options.wording.translations_for(locale: locale)
|
20
|
-
return unless has_android_wording?(locale_wording: locale_wording)
|
21
|
-
|
22
|
-
output_dir = compute_output_dir(wording: wording, locale: locale, platform_dir: platform_dir)
|
23
|
-
@file_system_repository.create_directory(path: output_dir)
|
24
|
-
|
25
|
-
content = @strings_serializer.render(locale_wording: locale_wording)
|
26
|
-
@file_system_repository.write(content: content, path: output_dir.join(STRINGS_FILENAME))
|
27
|
-
LOGGER.debug("#{STRINGS_FILENAME} done !")
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
private
|
32
|
-
|
33
|
-
def has_android_wording?(locale_wording:)
|
34
|
-
locale_wording.has_singular_keys? || locale_wording.has_plural_keys?
|
35
|
-
end
|
36
|
-
|
37
|
-
def compute_output_dir(wording:, locale:, platform_dir:)
|
38
|
-
locale_suffix = wording.default_locale?(locale: locale) ? '' : "-#{locale}"
|
39
|
-
platform_dir.join(LOCALE_DIRECTORY_CONVENTION % { locale_suffix: locale_suffix })
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
@@ -1,22 +0,0 @@
|
|
1
|
-
module AdLocalize
|
2
|
-
module Interactors
|
3
|
-
module Platforms
|
4
|
-
class ExportCSVLocaleWording
|
5
|
-
def initialize
|
6
|
-
@file_system_repository = Repositories::FileSystemRepository.new
|
7
|
-
end
|
8
|
-
|
9
|
-
def call(export_wording_options:)
|
10
|
-
LOGGER.debug("Starting export CSV wording")
|
11
|
-
@file_system_repository.create_directory(path: export_wording_options.platform_output_directory)
|
12
|
-
export_wording_options.csv_paths.each_with_index do |csv_path, i|
|
13
|
-
file = File.basename("localization_#{i}.csv")
|
14
|
-
output_path = export_wording_options.platform_output_directory.join(file.to_s)
|
15
|
-
FileUtils.cp(csv_path, output_path)
|
16
|
-
end
|
17
|
-
LOGGER.debug("CSV wording export done !")
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|