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