toledo 0.0.0 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
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