web_translate_it 1.8.2.0 → 1.8.2.1
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.
- data/bin/wti +1 -1
- data/history.md +11 -0
- data/lib/web_translate_it.rb +2 -0
- data/lib/web_translate_it/command_line.rb +14 -13
- data/lib/web_translate_it/translation_file.rb +13 -13
- data/lib/web_translate_it/util.rb +8 -62
- data/lib/web_translate_it/util/array_util.rb +19 -0
- data/lib/web_translate_it/util/string_util.rb +32 -0
- data/{licence → license} +0 -0
- data/version.yml +1 -1
- metadata +13 -11
data/bin/wti
CHANGED
data/history.md
CHANGED
@@ -1,3 +1,14 @@
|
|
1
|
+
## Version 1.8.2.1 / 2011-10-14
|
2
|
+
|
3
|
+
* Fix frozen string bug on ruby 1.9.3 (thanks @mikian for the patch).
|
4
|
+
* Fix: arrays of symbols `ignore_locales: [:en, :fr]` are not being parsed by Psych.
|
5
|
+
People should use an array of strings (`ignore_locales: ['en', 'fr']`) or the longer version instead:
|
6
|
+
``` yaml
|
7
|
+
ignore_locales:
|
8
|
+
- :en
|
9
|
+
- :fr
|
10
|
+
```
|
11
|
+
|
1
12
|
## Version 1.8.2.0 / 2011-09-12
|
2
13
|
|
3
14
|
* `wti pull` downloads files in parallel, using up to 20 threads.
|
data/lib/web_translate_it.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
3
|
require 'web_translate_it/util'
|
4
|
+
require 'web_translate_it/util/array_util'
|
5
|
+
require 'web_translate_it/util/string_util'
|
4
6
|
require 'web_translate_it/configuration'
|
5
7
|
require 'web_translate_it/translation_file'
|
6
8
|
require 'web_translate_it/auto_fetch'
|
@@ -16,7 +16,7 @@ module WebTranslateIt
|
|
16
16
|
def pull
|
17
17
|
STDOUT.sync = true
|
18
18
|
`#{configuration.before_pull}` if configuration.before_pull
|
19
|
-
puts "Pulling files"
|
19
|
+
puts StringUtil.titleize("Pulling files")
|
20
20
|
|
21
21
|
# Selecting files to pull
|
22
22
|
files = []
|
@@ -28,7 +28,7 @@ module WebTranslateIt
|
|
28
28
|
threads = []
|
29
29
|
n_threads = (files.count.to_f/3).ceil >= 20 ? 20 : (files.count.to_f/3).ceil
|
30
30
|
puts "Using up to #{n_threads} threads"
|
31
|
-
|
31
|
+
ArrayUtil.chunk(files, n_threads).each do |file_array|
|
32
32
|
unless file_array.empty?
|
33
33
|
threads << Thread.new(file_array) do |file_array|
|
34
34
|
WebTranslateIt::Util.http_connection do |http|
|
@@ -48,7 +48,7 @@ module WebTranslateIt
|
|
48
48
|
def push
|
49
49
|
STDOUT.sync = true
|
50
50
|
`#{configuration.before_push}` if configuration.before_push
|
51
|
-
puts "Pushing files"
|
51
|
+
puts StringUtil.titleize("Pushing files")
|
52
52
|
WebTranslateIt::Util.http_connection do |http|
|
53
53
|
fetch_locales_to_push(configuration).each do |locale|
|
54
54
|
configuration.files.find_all{ |file| file.locale == locale }.each do |file|
|
@@ -62,7 +62,7 @@ module WebTranslateIt
|
|
62
62
|
def add
|
63
63
|
STDOUT.sync = true
|
64
64
|
if parameters == []
|
65
|
-
puts "No master file given."
|
65
|
+
puts StringUtil.failure("No master file given.")
|
66
66
|
puts "Usage: wti add master_file1 master_file2 ..."
|
67
67
|
exit
|
68
68
|
end
|
@@ -72,18 +72,18 @@ module WebTranslateIt
|
|
72
72
|
file.create(http)
|
73
73
|
end
|
74
74
|
end
|
75
|
-
puts "Master file added."
|
75
|
+
puts StringUtil.success("Master file added.")
|
76
76
|
end
|
77
77
|
|
78
78
|
def addlocale
|
79
79
|
STDOUT.sync = true
|
80
80
|
if parameters == []
|
81
|
-
puts "No locale code given."
|
81
|
+
puts StringUtil.failure("No locale code given.")
|
82
82
|
puts "Usage: wti addlocale locale1 locale2 ..."
|
83
83
|
exit
|
84
84
|
end
|
85
85
|
parameters.each do |param|
|
86
|
-
print "Adding locale #{param}... "
|
86
|
+
print StringUtil.success("Adding locale #{param}... ")
|
87
87
|
puts WebTranslateIt::Project.create_locale(configuration.api_key, param)
|
88
88
|
end
|
89
89
|
puts "Done!"
|
@@ -94,7 +94,7 @@ module WebTranslateIt
|
|
94
94
|
project = YAML.load WebTranslateIt::Project.fetch_info(api_key)
|
95
95
|
project_info = project['project']
|
96
96
|
if File.exists?('.wti') && !File.writable?('.wti')
|
97
|
-
puts "Error: `.wti` file is not writable."
|
97
|
+
puts StringUtil.failure("Error: `.wti` file is not writable.")
|
98
98
|
exit
|
99
99
|
end
|
100
100
|
File.open('.wti', 'w'){ |file| file << generate_configuration(api_key, project_info) }
|
@@ -104,16 +104,16 @@ module WebTranslateIt
|
|
104
104
|
end
|
105
105
|
|
106
106
|
def match
|
107
|
-
puts "Matching local files with File Manager"
|
107
|
+
puts StringUtil.titleize("Matching local files with File Manager")
|
108
108
|
configuration.files.find_all{ |mf| mf.locale == configuration.source_locale }.each do |master_file|
|
109
109
|
if !File.exists?(master_file.file_path)
|
110
|
-
puts master_file.file_path
|
110
|
+
puts StringUtil.failure(master_file.file_path) + " (#{master_file.locale})"
|
111
111
|
else
|
112
|
-
puts master_file.file_path
|
112
|
+
puts StringUtil.important(master_file.file_path) + " (#{master_file.locale})"
|
113
113
|
end
|
114
114
|
configuration.files.find_all{ |f| f.master_id == master_file.id }.each do |file|
|
115
115
|
if !File.exists?(file.file_path)
|
116
|
-
puts "- #{file.file_path}"
|
116
|
+
puts StringUtil.failure("- #{file.file_path}") + " (#{file.locale})"
|
117
117
|
else
|
118
118
|
puts "- #{file.file_path}" + " (#{file.locale})"
|
119
119
|
end
|
@@ -190,7 +190,8 @@ module WebTranslateIt
|
|
190
190
|
api_key: #{api_key}
|
191
191
|
|
192
192
|
# Optional: locales not to sync with Web Translate It.
|
193
|
-
#
|
193
|
+
# Takes a string, a symbol, or an array of string or symbol.
|
194
|
+
# More information here: https://github.com/AtelierConvivialite/webtranslateit/wiki
|
194
195
|
# ignore_locales: '#{project_info["source_locale"]["code"]}'
|
195
196
|
|
196
197
|
# Optional
|
@@ -39,7 +39,7 @@ module WebTranslateIt
|
|
39
39
|
def fetch(http_connection, force = false)
|
40
40
|
display = []
|
41
41
|
display.push(self.file_path)
|
42
|
-
display.push "#{self.local_checksum.to_s
|
42
|
+
display.push "#{StringUtil.checksumify(self.local_checksum.to_s)}..#{StringUtil.checksumify(self.remote_checksum.to_s)}"
|
43
43
|
if !File.exist?(self.file_path) or force or self.remote_checksum != self.local_checksum
|
44
44
|
begin
|
45
45
|
response = http_connection.get(api_url)
|
@@ -48,17 +48,17 @@ module WebTranslateIt
|
|
48
48
|
File.open(self.file_path, 'wb'){ |file| file << response.body } if response.code.to_i == 200 and response.body != ''
|
49
49
|
display.push Util.handle_response(response)
|
50
50
|
rescue
|
51
|
-
display.push "An error occured: #{$!}"
|
51
|
+
display.push StringUtil.failure("An error occured: #{$!}")
|
52
52
|
end
|
53
53
|
rescue Timeout::Error
|
54
|
-
puts "Request timeout. Will retry in 5 seconds."
|
54
|
+
puts StringUtil.failure("Request timeout. Will retry in 5 seconds.")
|
55
55
|
sleep(5)
|
56
56
|
fetch(http_connection, force)
|
57
57
|
end
|
58
58
|
else
|
59
|
-
display.push "Skipped"
|
59
|
+
display.push StringUtil.success("Skipped")
|
60
60
|
end
|
61
|
-
puts
|
61
|
+
puts ArrayUtil.to_columns(display)
|
62
62
|
end
|
63
63
|
|
64
64
|
# Update a language file to Web Translate It by performing a PUT Request.
|
@@ -75,21 +75,21 @@ module WebTranslateIt
|
|
75
75
|
def upload(http_connection, merge=false, ignore_missing=false, label=nil, low_priority=false)
|
76
76
|
display = []
|
77
77
|
display.push(self.file_path)
|
78
|
-
display.push "#{self.local_checksum.to_s
|
78
|
+
display.push "#{StringUtil.checksumify(self.local_checksum.to_s)}..#{StringUtil.checksumify(self.remote_checksum.to_s)}"
|
79
79
|
if File.exists?(self.file_path)
|
80
80
|
File.open(self.file_path) do |file|
|
81
81
|
begin
|
82
82
|
request = Net::HTTP::Put::Multipart.new(api_url, {"file" => UploadIO.new(file, "text/plain", file.path), "merge" => merge, "ignore_missing" => ignore_missing, "label" => label, "low_priority" => low_priority })
|
83
83
|
display.push Util.handle_response(http_connection.request(request))
|
84
|
-
puts
|
84
|
+
puts ArrayUtil.to_columns(display)
|
85
85
|
rescue Timeout::Error
|
86
|
-
puts "Request timeout. Will retry in 5 seconds."
|
86
|
+
puts StringUtil.failure("Request timeout. Will retry in 5 seconds.")
|
87
87
|
sleep(5)
|
88
88
|
upload(merge, ignore_missing, label, low_priority)
|
89
89
|
end
|
90
90
|
end
|
91
91
|
else
|
92
|
-
puts "Can't push #{self.file_path}. File doesn't exist."
|
92
|
+
puts StringUtil.failure("Can't push #{self.file_path}. File doesn't exist.")
|
93
93
|
end
|
94
94
|
end
|
95
95
|
|
@@ -107,21 +107,21 @@ module WebTranslateIt
|
|
107
107
|
def create(http_connection)
|
108
108
|
display = []
|
109
109
|
display.push file_path
|
110
|
-
display.push "#{self.local_checksum.to_s
|
110
|
+
display.push "#{StringUtil.checksumify(self.local_checksum.to_s)}..[ ]"
|
111
111
|
if File.exists?(self.file_path)
|
112
112
|
File.open(self.file_path) do |file|
|
113
113
|
begin
|
114
114
|
request = Net::HTTP::Post::Multipart.new(api_url_for_create, { "name" => self.file_path, "file" => UploadIO.new(file, "text/plain", file.path) })
|
115
115
|
display.push Util.handle_response(http_connection.request(request))
|
116
|
-
puts
|
116
|
+
puts ArrayUtil.to_columns(display)
|
117
117
|
rescue Timeout::Error
|
118
|
-
puts "Request timeout. Will retry in 5 seconds."
|
118
|
+
puts StringUtil.failure("Request timeout. Will retry in 5 seconds.")
|
119
119
|
sleep(5)
|
120
120
|
create
|
121
121
|
end
|
122
122
|
end
|
123
123
|
else
|
124
|
-
puts "\nFile #{self.file_path} doesn't exist!"
|
124
|
+
puts StringUtil.failure("\nFile #{self.file_path} doesn't exist!")
|
125
125
|
end
|
126
126
|
end
|
127
127
|
|
@@ -56,16 +56,16 @@ module WebTranslateIt
|
|
56
56
|
|
57
57
|
def self.handle_response(response, return_response = false)
|
58
58
|
if response.code.to_i >= 400 and response.code.to_i < 500
|
59
|
-
"Error: Can't find project for this API key."
|
59
|
+
StringUtil.failure("Error: Can't find project for this API key.")
|
60
60
|
elsif response.code.to_i >= 500
|
61
|
-
"Error: Server temporarily unavailable. Please try again shortly."
|
61
|
+
StringUtil.failure("Error: Server temporarily unavailable. Please try again shortly.")
|
62
62
|
else
|
63
63
|
return response.body if return_response
|
64
|
-
return "Server currently processing file. Please retry later."
|
65
|
-
return "OK"
|
66
|
-
return "Created"
|
67
|
-
return "Accepted"
|
68
|
-
return "Not Modified"
|
64
|
+
return StringUtil.failure("Server currently processing file. Please retry later.") if response.code.to_i == 102
|
65
|
+
return StringUtil.success("OK") if response.code.to_i == 200
|
66
|
+
return StringUtil.success("Created") if response.code.to_i == 201
|
67
|
+
return StringUtil.success("Accepted") if response.code.to_i == 202
|
68
|
+
return StringUtil.success("Not Modified") if response.code.to_i == 304
|
69
69
|
end
|
70
70
|
end
|
71
71
|
|
@@ -131,58 +131,4 @@ module WebTranslateIt
|
|
131
131
|
!RUBY_PLATFORM.downcase.include?("mingw32")
|
132
132
|
end
|
133
133
|
end
|
134
|
-
end
|
135
|
-
|
136
|
-
class Array
|
137
|
-
def to_columns
|
138
|
-
" #{self[0].backward_truncate} | #{self[1]} #{self[2]}"
|
139
|
-
end
|
140
|
-
|
141
|
-
def chunk(pieces=2)
|
142
|
-
len = self.length;
|
143
|
-
mid = (len/pieces)
|
144
|
-
chunks = []
|
145
|
-
start = 0
|
146
|
-
1.upto(pieces) do |i|
|
147
|
-
last = start+mid
|
148
|
-
last = last-1 unless len%pieces >= i
|
149
|
-
chunks << self[start..last] || []
|
150
|
-
start = last+1
|
151
|
-
end
|
152
|
-
chunks
|
153
|
-
end
|
154
|
-
|
155
|
-
end
|
156
|
-
|
157
|
-
class String
|
158
|
-
|
159
|
-
def backward_truncate
|
160
|
-
if length <= 50
|
161
|
-
spaces = ""
|
162
|
-
(50-length).times{ spaces << " " }
|
163
|
-
return self << spaces
|
164
|
-
else
|
165
|
-
return "..." << self[self.length-50+3..self.length]
|
166
|
-
end
|
167
|
-
end
|
168
|
-
|
169
|
-
def success
|
170
|
-
WebTranslateIt::Util.can_display_colors? ? "\e[32m#{self}\e[0m" : self
|
171
|
-
end
|
172
|
-
|
173
|
-
def failure
|
174
|
-
WebTranslateIt::Util.can_display_colors? ? "\e[31m#{self}\e[0m" : self
|
175
|
-
end
|
176
|
-
|
177
|
-
def checksumify
|
178
|
-
WebTranslateIt::Util.can_display_colors? ? "\e[33m#{self[0..6]}\e[0m" : self[0..6]
|
179
|
-
end
|
180
|
-
|
181
|
-
def titleize
|
182
|
-
WebTranslateIt::Util.can_display_colors? ? "\e[1m#{self}\e[0m\n\n" : self
|
183
|
-
end
|
184
|
-
|
185
|
-
def important
|
186
|
-
WebTranslateIt::Util.can_display_colors? ? "\e[1m#{self}\e[0m" : self
|
187
|
-
end
|
188
|
-
end
|
134
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
class ArrayUtil
|
2
|
+
def self.to_columns(arr)
|
3
|
+
" #{StringUtil.backward_truncate(arr[0])} | #{arr[1]} #{arr[2]}"
|
4
|
+
end
|
5
|
+
|
6
|
+
def self.chunk(arr, pieces=2)
|
7
|
+
len = arr.length;
|
8
|
+
mid = (len/pieces)
|
9
|
+
chunks = []
|
10
|
+
start = 0
|
11
|
+
1.upto(pieces) do |i|
|
12
|
+
last = start+mid
|
13
|
+
last = last-1 unless len%pieces >= i
|
14
|
+
chunks << arr[start..last] || []
|
15
|
+
start = last+1
|
16
|
+
end
|
17
|
+
chunks
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
class StringUtil
|
2
|
+
|
3
|
+
def self.backward_truncate(str)
|
4
|
+
if str.length <= 50
|
5
|
+
spaces = ""
|
6
|
+
(50-str.length).times{ spaces << " " }
|
7
|
+
return str.dup << spaces
|
8
|
+
else
|
9
|
+
return "..." << str[str.length-50+3..str.length]
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.success(str)
|
14
|
+
WebTranslateIt::Util.can_display_colors? ? "\e[32m#{str}\e[0m" : str
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.failure(str)
|
18
|
+
WebTranslateIt::Util.can_display_colors? ? "\e[31m#{str}\e[0m" : str
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.checksumify(str)
|
22
|
+
WebTranslateIt::Util.can_display_colors? ? "\e[33m#{str[0..6]}\e[0m" : str[0..6]
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.titleize(str)
|
26
|
+
WebTranslateIt::Util.can_display_colors? ? "\e[1m#{str}\e[0m\n\n" : str
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.important(str)
|
30
|
+
WebTranslateIt::Util.can_display_colors? ? "\e[1m#{str}\e[0m" : str
|
31
|
+
end
|
32
|
+
end
|
data/{licence → license}
RENAMED
File without changes
|
data/version.yml
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: web_translate_it
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.8.2.
|
4
|
+
version: 1.8.2.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-
|
12
|
+
date: 2011-10-14 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: multipart-post
|
16
|
-
requirement: &
|
16
|
+
requirement: &70362462653320 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 1.1.3
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70362462653320
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: trollop
|
27
|
-
requirement: &
|
27
|
+
requirement: &70362462652660 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: 1.16.2
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70362462652660
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: sinatra
|
38
|
-
requirement: &
|
38
|
+
requirement: &70362462651680 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: 1.2.6
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70362462651680
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: rspec
|
49
|
-
requirement: &
|
49
|
+
requirement: &70362462649880 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,7 +54,7 @@ dependencies:
|
|
54
54
|
version: 2.6.0
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70362462649880
|
58
58
|
description:
|
59
59
|
email: edouard@atelierconvivialite.com
|
60
60
|
executables:
|
@@ -65,7 +65,7 @@ extra_rdoc_files:
|
|
65
65
|
- readme.md
|
66
66
|
files:
|
67
67
|
- history.md
|
68
|
-
-
|
68
|
+
- license
|
69
69
|
- readme.md
|
70
70
|
- version.yml
|
71
71
|
- examples/locale.rb
|
@@ -77,6 +77,8 @@ files:
|
|
77
77
|
- lib/web_translate_it/public/screen.css
|
78
78
|
- lib/web_translate_it/server.rb
|
79
79
|
- lib/web_translate_it/translation_file.rb
|
80
|
+
- lib/web_translate_it/util/array_util.rb
|
81
|
+
- lib/web_translate_it/util/string_util.rb
|
80
82
|
- lib/web_translate_it/util.rb
|
81
83
|
- lib/web_translate_it/views/index.erb
|
82
84
|
- lib/web_translate_it.rb
|