toledo 0.0.0 → 0.1.3

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.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/bin/toledo +180 -0
  3. metadata +29 -12
  4. data/lib/toledo.rb +0 -5
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 81503b97abd0e784908bfe98ec5d67eb5b13ac69aa47006a5b094e0278532905
4
- data.tar.gz: 46303869ae318654d7f9e45ba64ddf0d4187e1fcc02313f2c4370e04a09939ed
3
+ metadata.gz: daf4f9800b7e252d961e517887141ec30061d4c21a966ade789a06c52a39ddd5
4
+ data.tar.gz: b2dc456ac4d421262c26b9fe5f212b0cdfa18b49b706e8f0fc46be42fe43f602
5
5
  SHA512:
6
- metadata.gz: 25b235c722e7ee546e126be332ce0121075dd3d9ad506cc9081ae2768cc1a1ea2b6914f9fe59fada846baf28595e04e5212601e2fed52d9d158147c0ff8690bb
7
- data.tar.gz: b6d574336187ee34f37fe547920db6de4ccdf849cfc322208af9b21cf98a6659257382bec4425e147b93c344f2287aaf44b9591cb4010f62bf21e7c49cbfca06
6
+ metadata.gz: 27d2c61cf26fedfe6f431c4c1d73eb92bc015661d853752d159067523d35a552de13cf3c30b85f6c97ebd2a9d5f5c4345c1b0e6b091955783ca912d6fb797d3d
7
+ data.tar.gz: 7be80a830368cef8bbec831ce35d75005dc110d5b1d8d030515b7626a8c9cd90c54dce5ac57d5994dd14de9da2091814e937061bb03e1eec126d0d47f4e150b2
data/bin/toledo ADDED
@@ -0,0 +1,180 @@
1
+ require "google/apis/sheets_v4"
2
+ require "googleauth"
3
+ require "googleauth/stores/file_token_store"
4
+ require "fileutils"
5
+ require "yaml"
6
+ require 'json'
7
+
8
+ OOB_URI = "urn:ietf:wg:oauth:2.0:oob".freeze
9
+ APPLICATION_NAME = "Google Sheets API Ruby Quickstart".freeze
10
+ CONFIG_PATH = ".toledo.yaml".freeze
11
+ CREDENTIALS_PATH = ".credentials.json".freeze
12
+ TOKEN_PATH = ".token.yaml".freeze
13
+ SCOPE = Google::Apis::SheetsV4::AUTH_SPREADSHEETS_READONLY
14
+
15
+ def authorize
16
+ client_id = Google::Auth::ClientId.from_file CREDENTIALS_PATH
17
+ token_store = Google::Auth::Stores::FileTokenStore.new file: TOKEN_PATH
18
+ authorizer = Google::Auth::UserAuthorizer.new client_id, SCOPE, token_store
19
+ user_id = "default"
20
+ credentials = authorizer.get_credentials user_id
21
+ if credentials.nil?
22
+ url = authorizer.get_authorization_url base_url: OOB_URI
23
+ puts "Open the following URL in the browser and enter the " \
24
+ "resulting code after authorization:\n" + url
25
+ code = gets
26
+ credentials = authorizer.get_and_store_credentials_from_code(
27
+ user_id: user_id, code: code, base_url: OOB_URI
28
+ )
29
+ end
30
+ credentials
31
+ end
32
+
33
+ def self.build_row(key, value, target)
34
+ if target == "ios"
35
+ return self.build_ios_row(key, value)
36
+ else
37
+ return self.build_android_row(key, value)
38
+ end
39
+ end
40
+
41
+ def self.build_ios_row(key, value)
42
+ value.gsub! "\n", "\\n"
43
+ value.gsub! "\"", "\\\""
44
+ value.gsub!(/\%[0-9]\$s/) { |s| s.gsub! 's', '@'}
45
+ value.gsub! '%s', '%@'
46
+ return "\"" + key + "\" = \"" + value + "\";\n"
47
+ end
48
+
49
+ def self.build_android_row(key, value)
50
+ value.gsub! "&", "&"
51
+ value.gsub! "\n", "\\n"
52
+ value.gsub! "'", %q(\\\')
53
+ value.gsub! "\"", "\\\""
54
+ value.gsub! "...", "…"
55
+ value.gsub! "<", "&lt;"
56
+ value.gsub! ">", "&gt;"
57
+ return " <string name=\"" + key + "\">" + value + "</string>\n"
58
+ end
59
+
60
+ def self.build_comment(comment, target)
61
+ if target == "ios"
62
+ return "// #{comment}\n"
63
+ else
64
+ return " <!-- #{comment} -->\n"
65
+ end
66
+ end
67
+
68
+ def self.get_file_path(language, modul, file_name, target, is_default_language)
69
+ if target == "ios"
70
+ return "#{language}.lproj/#{file_name}.strings"
71
+ else
72
+ language_suffix = is_default_language ? "" : "-#{language}"
73
+ return "#{modul}/**/values#{language_suffix}/#{file_name}.xml"
74
+ end
75
+ end
76
+
77
+ def self.file_prefix(target)
78
+ if target == "ios"
79
+ return ""
80
+ else
81
+ return "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n"
82
+ end
83
+ end
84
+
85
+ def self.file_suffix(target)
86
+ if target == "ios"
87
+ return ""
88
+ else
89
+ return "</resources>\n"
90
+ end
91
+ end
92
+
93
+ def fetch(spreadsheet_id, languages, default_language, target, sheets)
94
+ service = Google::Apis::SheetsV4::SheetsService.new
95
+ service.client_options.application_name = APPLICATION_NAME
96
+ service.authorization = authorize
97
+
98
+
99
+ sheets.each do |sheet|
100
+ range = sheet["name"]
101
+ response = service.get_spreadsheet_values spreadsheet_id, range
102
+ puts "No data found." if response.values.empty?
103
+ sheet_data = response.values
104
+
105
+ headers = sheet_data.first
106
+ languages = headers.select { |key| key.length == 2 }
107
+
108
+ rows = sheet_data.drop(1)
109
+
110
+ languages.each_with_index do |language, index|
111
+ is_default_language = default_language == language || languages.count == 1
112
+ file_content = file_prefix(target)
113
+ file_name = sheet["file_name"]
114
+ modul = sheet["module"]
115
+ file_path = get_file_path(language, modul, file_name, target, is_default_language)
116
+ file = Dir[file_path].first
117
+
118
+ if file.nil?
119
+ puts "File with name: \"#{file_name}\" for language \"#{language}\" does not exist in module \"#{modul}\"! Please create it first!"
120
+ next
121
+ end
122
+
123
+ puts "Generating translation file for language \"#{language}\""
124
+ rows.each do |row|
125
+ key = row.first
126
+ value = row[index + 1]
127
+
128
+ description = nil
129
+ if row.count == headers.count
130
+ description = row.last
131
+ end
132
+
133
+ if value.nil? || value.empty?
134
+ if !key.nil? && !key.empty?
135
+ file_content += build_comment(key, target)
136
+ else
137
+ file_content += "\n"
138
+ end
139
+ next
140
+ end
141
+
142
+ if description != nil
143
+ file_content += build_comment(description, target)
144
+ end
145
+
146
+ file_content += build_row(key, value, target)
147
+ end
148
+ file_content += file_suffix(target)
149
+
150
+ File.open(file, "w") do |f|
151
+ f.write(file_content)
152
+ end
153
+ end
154
+ end
155
+ end
156
+
157
+ if Dir[CONFIG_PATH].first.nil?
158
+ UI.error("conifg file missing. Find example at:\n https://rubygems.org/gems/toledo")
159
+ return
160
+ end
161
+
162
+ if Dir[CREDENTIALS_PATH].first.nil?
163
+ UI.error("credentials file missing. Download it from:\n https://developers.google.com/sheets/api/quickstart/ruby")
164
+ return
165
+ end
166
+
167
+ config = YAML.load_file(".toledo.yaml")
168
+ spreadsheet_id = config["spreadsheet_id"]
169
+ languages = JSON.parse("#{config["languages"]}")
170
+ default_language = config["default_language"]
171
+ target = config["target"]
172
+ sheets = config["sheets"]
173
+
174
+ fetch(spreadsheet_id, languages, default_language, target, sheets)
175
+
176
+ class Toledo
177
+ def self.localize
178
+
179
+ end
180
+ end
metadata CHANGED
@@ -1,27 +1,44 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: toledo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.0
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sebastian Marschall
8
- autorequire:
8
+ - Martin Daum
9
+ autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2021-02-18 00:00:00.000000000 Z
12
- dependencies: []
13
- description: ''
12
+ date: 2021-11-19 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: fileutils
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - ">="
19
+ - !ruby/object:Gem::Version
20
+ version: '0'
21
+ type: :development
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ version: '0'
28
+ description: A simple tool for exporting strings from Google Sheets to Android/iOS
29
+ projects
14
30
  email: office@sebastianmarschall.com
15
- executables: []
31
+ executables:
32
+ - toledo
16
33
  extensions: []
17
34
  extra_rdoc_files: []
18
35
  files:
19
- - lib/toledo.rb
36
+ - bin/toledo
20
37
  homepage: https://rubygems.org/gems/toledo
21
38
  licenses:
22
- - APACHE 2.0
39
+ - GPL-2.0
23
40
  metadata: {}
24
- post_install_message:
41
+ post_install_message:
25
42
  rdoc_options: []
26
43
  require_paths:
27
44
  - lib
@@ -36,8 +53,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
36
53
  - !ruby/object:Gem::Version
37
54
  version: '0'
38
55
  requirements: []
39
- rubygems_version: 3.0.3
40
- signing_key:
56
+ rubygems_version: 3.2.22
57
+ signing_key:
41
58
  specification_version: 4
42
- summary: import/export strings to/from google sheets
59
+ summary: Google Sheets to Android/iOS translation file!
43
60
  test_files: []
data/lib/toledo.rb DELETED
@@ -1,5 +0,0 @@
1
- class Toledo
2
- def self.hi
3
- puts "Hello world!!"
4
- end
5
- end