web_translate_it 2.3.4 → 2.4.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f110c5129a30e8130fd658a1f3c743baac52a893
4
- data.tar.gz: 21dc480ee25d20e4cab9a304ba552296438ec080
3
+ metadata.gz: d27a853eb6927377b553c9a81e358fd956e1ccea
4
+ data.tar.gz: 9fd90672cc4afcc3296d0d181afd1a78d8d4ccac
5
5
  SHA512:
6
- metadata.gz: c646530ef9792216c95ec1d7b1a067339ac88bb0df60a54e0c77ff8f28173870ea2b94b83c69f7571b610d761a53bb23ee462e3bff4d506a0a6607e9c5210606
7
- data.tar.gz: 40f7ea3fa226a9e0fd5d67886f30d871b03f513a20d5c097a7f6725252f3b97b4b6ac930012b9c681dd996cbdcaa51798c9297a877a22c252f8a06477d09d656
6
+ metadata.gz: 809906846a45331f7145c20fcc0cd1c916bc01ecf4298c46c0c12f49ad6152dbde2241284c8ea4838c9121be887aecc4b9f438958f1210a40b1885fed736b50f
7
+ data.tar.gz: d78d3d6f11aba5f46c0c0e811cbd0c15763bf7844deebb509bf9955cf7889208df40e406e1185bf2363386f24f590e51d6c8977a97241df39f6da20077eb82c1
data/history.md CHANGED
@@ -1,3 +1,8 @@
1
+ ## Version 2.4.0 / 2015-08-10
2
+
3
+ * Now returns correct exit codes. `0` if command successful, `1` if any error has occured.
4
+ * Limit the amount of retries to 3 on timeout.
5
+
1
6
  ## Version 2.3.4 / 2014-05-23
2
7
 
3
8
  * Add `--debug` option to turn on debug output.
@@ -27,10 +27,12 @@ module WebTranslateIt
27
27
  end
28
28
  throb { print " #{message}"; self.configuration = WebTranslateIt::Configuration.new(project_path, configuration_file_path); print " #{message} on #{self.configuration.project_name}"; }
29
29
  end
30
- self.send(command)
30
+ success = self.send(command)
31
+ exit 1 if !success
31
32
  end
32
33
 
33
34
  def pull
35
+ complete_success = true
34
36
  STDOUT.sync = true
35
37
  `#{configuration.before_pull}` if configuration.before_pull
36
38
  # Selecting files to pull
@@ -54,7 +56,8 @@ module WebTranslateIt
54
56
  threads << Thread.new(file_array) do |file_array|
55
57
  WebTranslateIt::Connection.new(configuration.api_key) do |http|
56
58
  file_array.each do |file|
57
- file.fetch(http, command_options.force)
59
+ success = file.fetch(http, command_options.force)
60
+ complete_success = false if !success
58
61
  end
59
62
  end
60
63
  end
@@ -64,10 +67,12 @@ module WebTranslateIt
64
67
  time = Time.now - time
65
68
  puts "Pulled #{files.size} files at #{(files.size/time).round} files/sec, using #{n_threads} threads."
66
69
  `#{configuration.after_pull}` if configuration.after_pull
70
+ complete_success
67
71
  end
68
72
  end
69
73
 
70
74
  def push
75
+ complete_success = true
71
76
  STDOUT.sync = true
72
77
  `#{configuration.before_push}` if configuration.before_push
73
78
  WebTranslateIt::Connection.new(configuration.api_key) do |http|
@@ -81,15 +86,18 @@ module WebTranslateIt
81
86
  puts "No files to push."
82
87
  else
83
88
  files.each do |file|
84
- file.upload(http, command_options[:merge], command_options.ignore_missing, command_options.label, command_options.low_priority, command_options[:minor], command_options.force)
89
+ success = file.upload(http, command_options[:merge], command_options.ignore_missing, command_options.label, command_options.low_priority, command_options[:minor], command_options.force)
90
+ complete_success = false if !success
85
91
  end
86
92
  end
87
93
  end
88
94
  end
89
95
  `#{configuration.after_push}` if configuration.after_push
96
+ complete_success
90
97
  end
91
98
 
92
99
  def add
100
+ complete_success = true
93
101
  STDOUT.sync = true
94
102
  if parameters == []
95
103
  puts StringUtil.failure("Error: You must provide the path to the master file to add.")
@@ -102,15 +110,18 @@ module WebTranslateIt
102
110
  if to_add.any?
103
111
  to_add.each do |param|
104
112
  file = TranslationFile.new(nil, param, nil, configuration.api_key)
105
- file.create(http, command_options.low_priority)
113
+ success = file.create(http, command_options.low_priority)
114
+ complete_success = false if !success
106
115
  end
107
116
  else
108
117
  puts "No new master file to add."
109
118
  end
110
119
  end
120
+ complete_success
111
121
  end
112
122
 
113
123
  def rm
124
+ complete_success = true
114
125
  STDOUT.sync = true
115
126
  if parameters == []
116
127
  puts StringUtil.failure("Error: You must provide the path to the master file to remove.")
@@ -123,15 +134,18 @@ module WebTranslateIt
123
134
  configuration.files.find_all{ |file| file.file_path == param }.each do |master_file|
124
135
  master_file.delete(http)
125
136
  # delete files
126
- File.delete(master_file.file_path) if File.exists?(master_file.file_path)
137
+ success = File.delete(master_file.file_path) if File.exists?(master_file.file_path)
138
+ complete_success = false if !success
127
139
  configuration.files.find_all{ |file| file.master_id == master_file.id }.each do |target_file|
128
- File.delete(target_file.file_path) if File.exists?(target_file.file_path)
140
+ success = File.delete(target_file.file_path) if File.exists?(target_file.file_path)
141
+ complete_success = false if !success
129
142
  end
130
143
  end
131
144
  end
132
145
  end
133
146
  end
134
147
  puts StringUtil.success("Master file deleted.")
148
+ complete_success
135
149
  end
136
150
 
137
151
  def addlocale
@@ -139,7 +153,7 @@ module WebTranslateIt
139
153
  if parameters == []
140
154
  puts StringUtil.failure("Locale code missing.")
141
155
  puts "Usage: wti addlocale fr es ..."
142
- exit
156
+ exit 1
143
157
  end
144
158
  parameters.each do |param|
145
159
  print StringUtil.success("Adding locale #{param.upcase}... ")
@@ -155,7 +169,7 @@ module WebTranslateIt
155
169
  if parameters == []
156
170
  puts StringUtil.failure("Error: You must provide the locale code to remove.")
157
171
  puts "Usage: wti rmlocale fr es ..."
158
- exit
172
+ exit 1
159
173
  end
160
174
  parameters.each do |param|
161
175
  if Util.ask_yes_no("Are you certain you want to delete the locale #{param.upcase}?\nThis will also delete its files and translations.", false)
@@ -227,6 +241,7 @@ module WebTranslateIt
227
241
  end
228
242
  end
229
243
  end
244
+ return true
230
245
  end
231
246
 
232
247
  def status
@@ -237,6 +252,7 @@ module WebTranslateIt
237
252
  percent_completed = Util.calculate_percentage(values['count_strings_done'].to_i, values['count_strings'].to_i)
238
253
  puts "#{locale}: #{percent_translated}% translated, #{percent_completed}% completed."
239
254
  end
255
+ return true
240
256
  end
241
257
 
242
258
  def fetch_locales_to_pull
@@ -3,6 +3,8 @@ module WebTranslateIt
3
3
  class Project
4
4
 
5
5
  def self.fetch_info(api_key)
6
+ success = true
7
+ tries ||= 3
6
8
  begin
7
9
  WebTranslateIt::Connection.new(api_key) do |http|
8
10
  request = Net::HTTP::Get.new("/api/projects/#{api_key}.yaml")
@@ -18,15 +20,22 @@ module WebTranslateIt
18
20
  end
19
21
  end
20
22
  rescue Timeout::Error
21
- puts "The request timed out. The service may be overloaded. We will retry in 5 seconds."
22
- sleep(5)
23
- retry
23
+ puts "Request timeout. Will retry in 5 seconds."
24
+ if (tries -= 1) > 0
25
+ sleep(5)
26
+ retry
27
+ else
28
+ success = false
29
+ end
24
30
  rescue
25
31
  puts $!.inspect
26
32
  end
33
+ success
27
34
  end
28
35
 
29
36
  def self.fetch_stats(api_key)
37
+ success = true
38
+ tries ||= 3
30
39
  begin
31
40
  WebTranslateIt::Connection.new(api_key) do |http|
32
41
  request = Net::HTTP::Get.new("/api/projects/#{api_key}/stats.yaml")
@@ -35,13 +44,20 @@ module WebTranslateIt
35
44
  return Util.handle_response(http.request(request), true)
36
45
  end
37
46
  rescue Timeout::Error
38
- puts "The request timed out. The service may be overloaded. We will retry in 5 seconds."
39
- sleep(5)
40
- retry
47
+ puts "Request timeout. Will retry in 5 seconds."
48
+ if (tries -= 1) > 0
49
+ sleep(5)
50
+ retry
51
+ else
52
+ success = false
53
+ end
41
54
  end
55
+ success
42
56
  end
43
57
 
44
58
  def self.create_locale(locale_code)
59
+ success = true
60
+ tries ||= 3
45
61
  begin
46
62
  request = Net::HTTP::Post.new("/api/projects/#{Connection.api_key}/locales")
47
63
  request.add_field("X-Client-Name", "web_translate_it")
@@ -49,23 +65,35 @@ module WebTranslateIt
49
65
  request.set_form_data({ 'id' => locale_code }, ';')
50
66
  Util.handle_response(Connection.http_connection.request(request), true)
51
67
  rescue Timeout::Error
52
- puts "The request timed out. The service may be overloaded. We will retry in 5 seconds."
53
- sleep(5)
54
- retry
68
+ puts "Request timeout. Will retry in 5 seconds."
69
+ if (tries -= 1) > 0
70
+ sleep(5)
71
+ retry
72
+ else
73
+ success = false
74
+ end
55
75
  end
76
+ success
56
77
  end
57
78
 
58
79
  def self.delete_locale(locale_code)
80
+ success = true
81
+ tries ||= 3
59
82
  begin
60
83
  request = Net::HTTP::Delete.new("/api/projects/#{Connection.api_key}/locales/#{locale_code}")
61
84
  request.add_field("X-Client-Name", "web_translate_it")
62
85
  request.add_field("X-Client-Version", WebTranslateIt::Util.version)
63
86
  Util.handle_response(Connection.http_connection.request(request), true)
64
87
  rescue Timeout::Error
65
- puts "The request timed out. The service may be overloaded. We will retry in 5 seconds."
66
- sleep(5)
67
- retry
88
+ puts "Request timeout. Will retry in 5 seconds."
89
+ if (tries -= 1) > 0
90
+ sleep(5)
91
+ retry
92
+ else
93
+ success = false
94
+ end
68
95
  end
96
+ success
69
97
  end
70
98
  end
71
99
  end
@@ -51,6 +51,8 @@ module WebTranslateIt
51
51
  # to find and instantiate an array of String which key is like `product_name_123`.
52
52
 
53
53
  def self.find_all(params = {})
54
+ success = true
55
+ tries ||= 3
54
56
  params.stringify_keys!
55
57
  url = "/api/projects/#{Connection.api_key}/strings.yaml"
56
58
  url += '?' + HashUtil.to_params("filters" => params) unless params.empty?
@@ -79,10 +81,15 @@ module WebTranslateIt
79
81
  end
80
82
  return strings
81
83
  rescue Timeout::Error
82
- puts "The request timed out. The service may be overloaded. We will retry in 5 seconds."
83
- sleep(5)
84
- retry
84
+ puts "Request timeout. Will retry in 5 seconds."
85
+ if (tries -= 1) > 0
86
+ sleep(5)
87
+ retry
88
+ else
89
+ success = false
90
+ end
85
91
  end
92
+ success
86
93
  end
87
94
 
88
95
  # Find a String based on its ID
@@ -100,6 +107,8 @@ module WebTranslateIt
100
107
  #
101
108
 
102
109
  def self.find(id)
110
+ success = true
111
+ tries ||= 3
103
112
  request = Net::HTTP::Get.new("/api/projects/#{Connection.api_key}/strings/#{id}.yaml")
104
113
  request.add_field("X-Client-Name", "web_translate_it")
105
114
  request.add_field("X-Client-Version", WebTranslateIt::Util.version)
@@ -111,10 +120,15 @@ module WebTranslateIt
111
120
  string.new_record = false
112
121
  return string
113
122
  rescue Timeout::Error
114
- puts "The request timed out. The service may be overloaded. We will retry in 5 seconds."
115
- sleep(5)
116
- retry
123
+ puts "Request timeout. Will retry in 5 seconds."
124
+ if (tries -= 1) > 0
125
+ sleep(5)
126
+ retry
127
+ else
128
+ success = false
129
+ end
117
130
  end
131
+ success
118
132
  end
119
133
 
120
134
  # Update or create a String to WebTranslateIt.com
@@ -143,6 +157,8 @@ module WebTranslateIt
143
157
  #
144
158
 
145
159
  def delete
160
+ success = true
161
+ tries ||= 3
146
162
  request = Net::HTTP::Delete.new("/api/projects/#{Connection.api_key}/strings/#{self.id}")
147
163
  request.add_field("X-Client-Name", "web_translate_it")
148
164
  request.add_field("X-Client-Version", WebTranslateIt::Util.version)
@@ -150,10 +166,15 @@ module WebTranslateIt
150
166
  begin
151
167
  Util.handle_response(Connection.http_connection.request(request), true, true)
152
168
  rescue Timeout::Error
153
- puts "The request timed out. The service may be overloaded. We will retry in 5 seconds."
154
- sleep(5)
155
- retry
169
+ puts "Request timeout. Will retry in 5 seconds."
170
+ if (tries -= 1) > 0
171
+ sleep(5)
172
+ retry
173
+ else
174
+ success = false
175
+ end
156
176
  end
177
+ success
157
178
  end
158
179
 
159
180
  # Gets a Translation for a String
@@ -167,6 +188,8 @@ module WebTranslateIt
167
188
  #
168
189
 
169
190
  def translation_for(locale)
191
+ success = true
192
+ tries ||= 3
170
193
  translation = self.translations.detect{ |t| t.locale == locale }
171
194
  return translation if translation
172
195
  return nil if self.new_record
@@ -182,10 +205,15 @@ module WebTranslateIt
182
205
  return translation
183
206
 
184
207
  rescue Timeout::Error
185
- puts "The request timed out. The service may be overloaded. We will retry in 5 seconds."
186
- sleep(5)
187
- retry
188
- end
208
+ puts "Request timeout. Will retry in 5 seconds."
209
+ if (tries -= 1) > 0
210
+ sleep(5)
211
+ retry
212
+ else
213
+ success = false
214
+ end
215
+ end
216
+ success
189
217
  end
190
218
 
191
219
  protected
@@ -194,6 +222,8 @@ module WebTranslateIt
194
222
  #
195
223
 
196
224
  def update
225
+ success = true
226
+ tries ||= 3
197
227
  request = Net::HTTP::Put.new("/api/projects/#{Connection.api_key}/strings/#{self.id}.yaml")
198
228
  request.add_field("X-Client-Name", "web_translate_it")
199
229
  request.add_field("X-Client-Version", WebTranslateIt::Util.version)
@@ -208,16 +238,23 @@ module WebTranslateIt
208
238
  begin
209
239
  Util.handle_response(Connection.http_connection.request(request), true, true)
210
240
  rescue Timeout::Error
211
- puts "The request timed out. The service may be overloaded. We will retry in 5 seconds."
212
- sleep(5)
213
- retry
241
+ puts "Request timeout. Will retry in 5 seconds."
242
+ if (tries -= 1) > 0
243
+ sleep(5)
244
+ retry
245
+ else
246
+ success = false
247
+ end
214
248
  end
249
+ success
215
250
  end
216
251
 
217
252
  # Create a new String to WebTranslateIt.com
218
253
  #
219
254
 
220
255
  def create
256
+ success = true
257
+ tries ||= 3
221
258
  request = Net::HTTP::Post.new("/api/projects/#{Connection.api_key}/strings")
222
259
  request.add_field("X-Client-Name", "web_translate_it")
223
260
  request.add_field("X-Client-Version", WebTranslateIt::Util.version)
@@ -230,10 +267,15 @@ module WebTranslateIt
230
267
  self.new_record = false
231
268
  return true
232
269
  rescue Timeout::Error
233
- puts "The request timed out. The service may be overloaded. We will retry in 5 seconds."
234
- sleep(5)
235
- retry
270
+ puts "Request timeout. Will retry in 5 seconds."
271
+ if (tries -= 1) > 0
272
+ sleep(5)
273
+ retry
274
+ else
275
+ success = false
276
+ end
236
277
  end
278
+ success
237
279
  end
238
280
 
239
281
  def to_json(with_translations = false)
@@ -42,6 +42,8 @@ module WebTranslateIt
42
42
  # puts terms.inspect #=> An array of WebTranslateIt::Term objects
43
43
 
44
44
  def self.find_all(params = {})
45
+ success = true
46
+ tries ||= 3
45
47
  params.stringify_keys!
46
48
  url = "/api/projects/#{Connection.api_key}/terms.yaml"
47
49
  url += '?' + HashUtil.to_params(params) unless params.empty?
@@ -70,10 +72,15 @@ module WebTranslateIt
70
72
  end
71
73
  return terms
72
74
  rescue Timeout::Error
73
- puts "The request timed out. The service may be overloaded. We will retry in 5 seconds."
74
- sleep(5)
75
- retry
75
+ puts "Request timeout. Will retry in 5 seconds."
76
+ if (tries -= 1) > 0
77
+ sleep(5)
78
+ retry
79
+ else
80
+ success = false
81
+ end
76
82
  end
83
+ success
77
84
  end
78
85
 
79
86
  # Find a Term based on its ID
@@ -91,6 +98,8 @@ module WebTranslateIt
91
98
  #
92
99
 
93
100
  def self.find(term_id)
101
+ success = true
102
+ tries ||= 3
94
103
  request = Net::HTTP::Get.new("/api/projects/#{Connection.api_key}/terms/#{term_id}.yaml")
95
104
  request.add_field("X-Client-Name", "web_translate_it")
96
105
  request.add_field("X-Client-Version", WebTranslateIt::Util.version)
@@ -102,10 +111,15 @@ module WebTranslateIt
102
111
  term.new_record = false
103
112
  return term
104
113
  rescue Timeout::Error
105
- puts "The request timed out. The service may be overloaded. We will retry in 5 seconds."
106
- sleep(5)
107
- retry
114
+ puts "Request timeout. Will retry in 5 seconds."
115
+ if (tries -= 1) > 0
116
+ sleep(5)
117
+ retry
118
+ else
119
+ success = false
120
+ end
108
121
  end
122
+ success
109
123
  end
110
124
 
111
125
  # Update or create a Term to WebTranslateIt.com
@@ -134,6 +148,8 @@ module WebTranslateIt
134
148
  #
135
149
 
136
150
  def delete
151
+ success = true
152
+ tries ||= 3
137
153
  request = Net::HTTP::Delete.new("/api/projects/#{Connection.api_key}/terms/#{self.id}")
138
154
  request.add_field("X-Client-Name", "web_translate_it")
139
155
  request.add_field("X-Client-Version", WebTranslateIt::Util.version)
@@ -141,10 +157,15 @@ module WebTranslateIt
141
157
  begin
142
158
  Util.handle_response(Connection.http_connection.request(request), true, true)
143
159
  rescue Timeout::Error
144
- puts "The request timed out. The service may be overloaded. We will retry in 5 seconds."
145
- sleep(5)
146
- retry
160
+ puts "Request timeout. Will retry in 5 seconds."
161
+ if (tries -= 1) > 0
162
+ sleep(5)
163
+ retry
164
+ else
165
+ success = false
166
+ end
147
167
  end
168
+ success
148
169
  end
149
170
 
150
171
  # Gets a Translation for a Term
@@ -158,6 +179,8 @@ module WebTranslateIt
158
179
  #
159
180
 
160
181
  def translation_for(locale)
182
+ success = true
183
+ tries ||= 3
161
184
  translation = self.translations.detect{ |t| t.locale == locale }
162
185
  return translation if translation
163
186
  return nil if self.new_record
@@ -177,15 +200,22 @@ module WebTranslateIt
177
200
  return translations
178
201
 
179
202
  rescue Timeout::Error
180
- puts "The request timed out. The service may be overloaded. We will retry in 5 seconds."
181
- sleep(5)
182
- retry
203
+ puts "Request timeout. Will retry in 5 seconds."
204
+ if (tries -= 1) > 0
205
+ sleep(5)
206
+ retry
207
+ else
208
+ success = false
209
+ end
183
210
  end
211
+ success
184
212
  end
185
213
 
186
214
  protected
187
215
 
188
216
  def update
217
+ success = true
218
+ tries ||= 3
189
219
  request = Net::HTTP::Put.new("/api/projects/#{Connection.api_key}/terms/#{self.id}.yaml")
190
220
  request.add_field("X-Client-Name", "web_translate_it")
191
221
  request.add_field("X-Client-Version", WebTranslateIt::Util.version)
@@ -201,13 +231,20 @@ module WebTranslateIt
201
231
  begin
202
232
  Util.handle_response(Connection.http_connection.request(request), true, true)
203
233
  rescue Timeout::Error
204
- puts "The request timed out. The service may be overloaded. We will retry in 5 seconds."
205
- sleep(5)
206
- retry
234
+ puts "Request timeout. Will retry in 5 seconds."
235
+ if (tries -= 1) > 0
236
+ sleep(5)
237
+ retry
238
+ else
239
+ success = false
240
+ end
207
241
  end
242
+ success
208
243
  end
209
244
 
210
245
  def create
246
+ success = true
247
+ tries ||= 3
211
248
  request = Net::HTTP::Post.new("/api/projects/#{Connection.api_key}/terms")
212
249
  request.add_field("X-Client-Name", "web_translate_it")
213
250
  request.add_field("X-Client-Version", WebTranslateIt::Util.version)
@@ -222,10 +259,15 @@ module WebTranslateIt
222
259
  return true
223
260
 
224
261
  rescue Timeout::Error
225
- puts "The request timed out. The service may be overloaded. We will retry in 5 seconds."
226
- sleep(5)
227
- retry
262
+ puts "Request timeout. Will retry in 5 seconds."
263
+ if (tries -= 1) > 0
264
+ sleep(5)
265
+ retry
266
+ else
267
+ success = false
268
+ end
228
269
  end
270
+ success
229
271
  end
230
272
 
231
273
  def to_json(with_translations = false)
@@ -57,6 +57,8 @@ module WebTranslateIt
57
57
  protected
58
58
 
59
59
  def create
60
+ success = true
61
+ tries ||= 3
60
62
  request = Net::HTTP::Post.new("/api/projects/#{Connection.api_key}/terms/#{self.term_id}/locales/#{self.locale}/translations")
61
63
  request.add_field("X-Client-Name", "web_translate_it")
62
64
  request.add_field("X-Client-Version", WebTranslateIt::Util.version)
@@ -71,13 +73,20 @@ module WebTranslateIt
71
73
  return true
72
74
 
73
75
  rescue Timeout::Error
74
- puts "The request timed out. The service may be overloaded. We will retry in 5 seconds."
75
- sleep(5)
76
- retry
76
+ puts "Request timeout. Will retry in 5 seconds."
77
+ if (tries -= 1) > 0
78
+ sleep(5)
79
+ retry
80
+ else
81
+ success = false
82
+ end
77
83
  end
84
+ success
78
85
  end
79
86
 
80
87
  def update
88
+ success = true
89
+ tries ||= 3
81
90
  request = Net::HTTP::Put.new("/api/projects/#{Connection.api_key}/terms/#{self.id}/locales/#{self.locale}/translations/#{self.id}")
82
91
  request.add_field("X-Client-Name", "web_translate_it")
83
92
  request.add_field("X-Client-Version", WebTranslateIt::Util.version)
@@ -88,10 +97,15 @@ module WebTranslateIt
88
97
  begin
89
98
  Util.handle_response(Connection.http_connection.request(request), true, true)
90
99
  rescue Timeout::Error
91
- puts "The request timed out. The service may be overloaded. We will retry in 5 seconds."
92
- sleep(5)
93
- retry
100
+ puts "Request timeout. Will retry in 5 seconds."
101
+ if (tries -= 1) > 0
102
+ sleep(5)
103
+ retry
104
+ else
105
+ success = false
106
+ end
94
107
  end
108
+ success
95
109
  end
96
110
  end
97
111
  end
@@ -42,6 +42,7 @@ module WebTranslateIt
42
42
  #
43
43
 
44
44
  def save
45
+ tries ||= 3
45
46
  request = Net::HTTP::Post.new("/api/projects/#{Connection.api_key}/strings/#{self.string_id}/locales/#{self.locale}/translations")
46
47
  request.add_field("X-Client-Name", "web_translate_it")
47
48
  request.add_field("X-Client-Version", WebTranslateIt::Util.version)
@@ -51,9 +52,13 @@ module WebTranslateIt
51
52
  begin
52
53
  Util.handle_response(Connection.http_connection.request(request), true, true)
53
54
  rescue Timeout::Error
54
- puts "The request timed out. The service may be overloaded. We will retry in 5 seconds."
55
- sleep(5)
56
- retry
55
+ puts "Request timeout. Will retry in 5 seconds."
56
+ if (tries -= 1) > 0
57
+ sleep(5)
58
+ retry
59
+ else
60
+ success = false
61
+ end
57
62
  end
58
63
  end
59
64
 
@@ -37,6 +37,8 @@ module WebTranslateIt
37
37
  # file.fetch(true) # force to re-download the file, will return the content of the file with a 200 OK
38
38
  #
39
39
  def fetch(http_connection, force = false)
40
+ success = true
41
+ tries ||= 3
40
42
  display = []
41
43
  display.push(self.file_path)
42
44
  display.push "#{StringUtil.checksumify(self.local_checksum.to_s)}..#{StringUtil.checksumify(self.remote_checksum.to_s)}"
@@ -52,16 +54,22 @@ module WebTranslateIt
52
54
  display.push Util.handle_response(response)
53
55
  rescue Timeout::Error
54
56
  puts StringUtil.failure("Request timeout. Will retry in 5 seconds.")
55
- sleep(5)
56
- retry
57
+ if (tries -= 1) > 0
58
+ sleep(5)
59
+ retry
60
+ else
61
+ success = false
62
+ end
57
63
  rescue
58
64
  display.push StringUtil.failure("An error occured: #{$!}")
65
+ success = false
59
66
  end
60
67
  end
61
68
  else
62
69
  display.push StringUtil.success("Skipped")
63
70
  end
64
71
  print ArrayUtil.to_columns(display)
72
+ return success
65
73
  end
66
74
 
67
75
  # Update a language file to Web Translate It by performing a PUT Request.
@@ -76,6 +84,8 @@ module WebTranslateIt
76
84
  # Note that the request might or might not eventually be acted upon, as it might be disallowed when processing
77
85
  # actually takes place. This is due to the fact that language file imports are handled by background processing.
78
86
  def upload(http_connection, merge=false, ignore_missing=false, label=nil, low_priority=false, minor_changes=false, force=false)
87
+ success = true
88
+ tries ||= 3
79
89
  display = []
80
90
  display.push(self.file_path)
81
91
  display.push "#{StringUtil.checksumify(self.local_checksum.to_s)}..#{StringUtil.checksumify(self.remote_checksum.to_s)}"
@@ -89,8 +99,15 @@ module WebTranslateIt
89
99
  display.push Util.handle_response(http_connection.request(request))
90
100
  rescue Timeout::Error
91
101
  puts StringUtil.failure("Request timeout. Will retry in 5 seconds.")
92
- sleep(5)
93
- retry
102
+ if (tries -= 1) > 0
103
+ sleep(5)
104
+ retry
105
+ else
106
+ success = false
107
+ end
108
+ rescue
109
+ display.push StringUtil.failure("An error occured: #{$!}")
110
+ success = false
94
111
  end
95
112
  end
96
113
  else
@@ -100,6 +117,7 @@ module WebTranslateIt
100
117
  else
101
118
  puts StringUtil.failure("Can't push #{self.file_path}. File doesn't exist.")
102
119
  end
120
+ return success
103
121
  end
104
122
 
105
123
  # Create a master language file to Web Translate It by performing a POST Request.
@@ -114,6 +132,8 @@ module WebTranslateIt
114
132
  # actually takes place. This is due to the fact that language file imports are handled by background processing.
115
133
  #
116
134
  def create(http_connection, low_priority=false)
135
+ success = true
136
+ tries ||= 3
117
137
  display = []
118
138
  display.push file_path
119
139
  display.push "#{StringUtil.checksumify(self.local_checksum.to_s)}..[ ]"
@@ -127,21 +147,30 @@ module WebTranslateIt
127
147
  puts ArrayUtil.to_columns(display)
128
148
  rescue Timeout::Error
129
149
  puts StringUtil.failure("Request timeout. Will retry in 5 seconds.")
130
- sleep(5)
131
- retry
150
+ if (tries -= 1) > 0
151
+ sleep(5)
152
+ retry
153
+ else
154
+ success = false
155
+ end
156
+ rescue
157
+ display.push StringUtil.failure("An error occured: #{$!}")
158
+ success = false
132
159
  end
133
160
  end
134
161
  else
135
162
  puts StringUtil.failure("\nFile #{self.file_path} doesn't exist!")
136
163
  end
164
+ return success
137
165
  end
138
166
 
139
167
  # Delete a master language file from Web Translate It by performing a DELETE Request.
140
168
  #
141
169
  def delete(http_connection)
170
+ success = true
171
+ tries ||= 3
142
172
  display = []
143
173
  display.push file_path
144
- # display.push "#{StringUtil.checksumify(self.local_checksum.to_s)}..[ ]"
145
174
  if File.exists?(self.file_path)
146
175
  File.open(self.file_path) do |file|
147
176
  begin
@@ -152,13 +181,21 @@ module WebTranslateIt
152
181
  puts ArrayUtil.to_columns(display)
153
182
  rescue Timeout::Error
154
183
  puts StringUtil.failure("Request timeout. Will retry in 5 seconds.")
155
- sleep(5)
156
- retry
184
+ if (tries -= 1) > 0
185
+ sleep(5)
186
+ retry
187
+ else
188
+ success = false
189
+ end
190
+ rescue
191
+ display.push StringUtil.failure("An error occured: #{$!}")
192
+ success = false
157
193
  end
158
194
  end
159
195
  else
160
196
  puts StringUtil.failure("\nFile #{self.file_path} doesn't exist!")
161
197
  end
198
+ return success
162
199
  end
163
200
 
164
201
  def exists?
data/readme.md CHANGED
@@ -7,7 +7,7 @@
7
7
 
8
8
  wti lets you easily sync your language files with [WebTranslateIt.com](https://webtranslateit.com), a web-based tool to translation software.
9
9
 
10
- ![WebTranslateIt Synchronization Tool](http://f.cl.ly/items/2X3m0h0g0I1O1U07163o/wti_example.jpg)
10
+ <img src="https://s3.amazonaws.com/f.cl.ly/items/27192V1K263K2O433h2g/webtranslateit_com_%E2%80%94_edouard_Edouards-MacBook-Pro-2____code_webtranslateit_com_%E2%80%94___anslateit_com_%E2%80%94_zsh_%E2%80%94_80%C3%9740.png" alt="WebTranslateIt Synchronization Tool" width="500px">
11
11
 
12
12
  ### wti...
13
13
 
@@ -40,6 +40,20 @@ $ wti -v
40
40
  wti version 2.2.1
41
41
  ```
42
42
 
43
+ On some Linux distributions you may get the following error:
44
+
45
+ ``` bash
46
+ $ wti
47
+ If 'wti' is not a typo you can use command-not-found to lookup the package that contains it, like this:
48
+ cnf wti
49
+ ```
50
+
51
+ The reason is that the wti file is named in another way: `/usr/bin/wti.ruby2.1` so you will have to create a symlink to make wti run.
52
+
53
+ ``` bash
54
+ $ ln -s /usr/bin/wti.ruby2.1 wti
55
+ ```
56
+
43
57
  ## Configuration
44
58
 
45
59
  Now that the tool is installed, you’ll have to configure your project. Basically, `wti` is to be run on a project root directory, and looks for a `.wti` file containing your project information. The command `wti init` lets your create your `.wti` file.
@@ -182,6 +196,34 @@ There are 4 hooks:
182
196
 
183
197
  Check the [sample `.wti`](https://github.com/AtelierConvivialite/webtranslateit/blob/master/examples/.wti#L9..L13) file for implementation.
184
198
 
199
+ ## Exit codes
200
+
201
+ Since version 1.4.0 `wti` returns exit codes on failure. The exit code is `0` if the command executed successfully and `1` if the command executed but encountered at least one error. This is useful to act upon errors if you use `wti` to pull files in an automated build process.
202
+
203
+ ``` zsh
204
+ ~/code/webtranslateit.com[master]% wti pull
205
+ # Pulling files on WebTranslateIt
206
+ config/locales/translation_validator/en.yml | e82e044..e82e044 Skipped
207
+ config/locales/app/en.yml | f2ca86c..f2ca86c Skipped
208
+ config/locales/defaults/en.yml | 2fcb61f..2fcb61f Skipped
209
+ config/locales/js/en.yml | ee6589d..ee6589d Skipped
210
+ config/locales/js/fr.yml | 2f8bb0e..2f8bb0e Skipped
211
+ config/locales/translation_validator/fr.yml | 534af2c..534af2c Skipped
212
+ config/locales/app/fr.yml | 29f8c9d..da39a3e OK
213
+ config/locales/defaults/fr.yml | aca123e..aca123e Skipped
214
+ Pulled 8 files at 7 files/sec, using 3 threads.
215
+ ~/code/webtranslateit.com[master]% echo $!
216
+ 0
217
+ ~/code/webtranslateit.com[master]% wti pull
218
+ # Pulling files on WebTranslateIt
219
+ config/locales/translation_validator/en.yml | e82e044..e82e044 Error
220
+ config/locales/app/en.yml | f2ca86c..f2ca86c Skipped
221
+ config/locales/defaults/fr.yml | aca123e..aca123e Skipped
222
+ Pulled 3 files at 3 files/sec, using 3 threads.
223
+ ~/code/webtranslateit.com[master]% echo $!
224
+ 1
225
+ ```
226
+
185
227
  # License
186
228
 
187
- Copyright (c) 2009-2014 Atelier Convivialité, released under the MIT License.
229
+ Copyright (c) 2009-2015 Atelier Convivialité, released under the MIT License.
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: web_translate_it
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.4
4
+ version: 2.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Edouard Briere
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-23 00:00:00.000000000 Z
11
+ date: 2015-08-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: multipart-post
@@ -143,7 +143,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
143
143
  version: '0'
144
144
  requirements: []
145
145
  rubyforge_project:
146
- rubygems_version: 2.2.2
146
+ rubygems_version: 2.4.8
147
147
  signing_key:
148
148
  specification_version: 4
149
149
  summary: A CLI to sync locale files with WebTranslateIt.com.