toledo 0.0.0 → 0.1.0

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