gengo 0.0.6 → 0.0.7.rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +0 -6
- data/gengo-ruby.gemspec +2 -1
- data/lib/gengo-ruby/api_handler.rb +121 -48
- data/lib/gengo-ruby/gengo_exception.rb +5 -0
- data/lib/gengo-ruby/version.rb +1 -1
- data/test.rb +11 -0
- metadata +19 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: be085b6228a9ff5fd3fba670320090db211a8507
|
4
|
+
data.tar.gz: aa298c83a73ce44d7a51e6090a4f0ceb6c475291
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d60284a73d86897c116f3fc4242ef98d8fb5107eab982da7e5cea9f7649087963dc0c7c151b1d8b875dfda02c5e9746dcb7f81bd73f032fc508ab474d4270513
|
7
|
+
data.tar.gz: c1a2a082c13c47033295380ee221117548fe40bacbc6b51b904c9fd7e712e82b947ec02894a666d27a52be130d12d5934e52c68fbba0c357c9721dd35a1ed08c
|
data/Gemfile
CHANGED
data/gengo-ruby.gemspec
CHANGED
@@ -11,7 +11,7 @@ Gem::Specification.new do |gs|
|
|
11
11
|
"Issam Zeibak",
|
12
12
|
"Alexander Lidé",
|
13
13
|
]
|
14
|
-
gs.date = "2015-
|
14
|
+
gs.date = "2015-08-24"
|
15
15
|
gs.summary = "A library for interfacing with the Gengo Translation API."
|
16
16
|
gs.description = "Gengo is a service that offers various translation APIs, both machine and high quality human-sourced. The Gengo gem lets you interface with the Gengo REST API (http://developers.gengo.com/).Note: previous version of this library can be found at https://rubygems.org/gems/mygengo. All further updates will be made here."
|
17
17
|
gs.email = "api@gengo.com"
|
@@ -25,6 +25,7 @@ Gem::Specification.new do |gs|
|
|
25
25
|
gs.add_dependency('mime-types')
|
26
26
|
gs.add_development_dependency 'rspec', '~> 2.7'
|
27
27
|
gs.add_development_dependency 'rack-test'
|
28
|
+
gs.add_development_dependency 'rake'
|
28
29
|
gs.add_development_dependency 'simplecov'
|
29
30
|
gs.add_development_dependency 'webmock'
|
30
31
|
end
|
@@ -30,13 +30,13 @@ module Gengo
|
|
30
30
|
:private_key => '',
|
31
31
|
:api_version => '2',
|
32
32
|
:sandbox => false,
|
33
|
-
:user_agent => "Gengo Ruby Library; Version #{Gengo::Config::VERSION}; http://gengo.com/;",
|
33
|
+
:user_agent => "Gengo Ruby Library; Version #{Gengo::Config::VERSION}; Ruby Version #{RUBY_DESCRIPTION}; http://gengo.com/;",
|
34
34
|
:debug => false,
|
35
35
|
}.merge(opts)
|
36
36
|
|
37
37
|
# Let's go ahead and separate these out, for clarity...
|
38
38
|
@debug = @opts[:debug]
|
39
|
-
@api_host = (@opts[:sandbox]
|
39
|
+
@api_host = (@opts[:sandbox] ? Gengo::Config::SANDBOX_API_HOST : Gengo::Config::API_HOST)
|
40
40
|
|
41
41
|
# More of a public "check this" kind of object.
|
42
42
|
@client_info = {"VERSION" => Gengo::Config::VERSION}
|
@@ -94,18 +94,23 @@ module Gengo
|
|
94
94
|
http.read_timeout = 5*60
|
95
95
|
resp = http.request(req)
|
96
96
|
|
97
|
-
if is_download_file
|
97
|
+
return resp.body if is_download_file
|
98
|
+
|
99
|
+
begin
|
98
100
|
json = JSON.parse(resp.body)
|
99
|
-
|
100
|
-
|
101
|
-
|
101
|
+
rescue => e
|
102
|
+
# TODO(yugui) Log the original error
|
103
|
+
raise Gengo::Exception.new('error', resp.code.to_i, resp.body) unless resp.kind_of?(Net::HTTPSuccess)
|
102
104
|
|
103
|
-
#
|
104
|
-
|
105
|
-
|
106
|
-
return resp.body
|
105
|
+
# It should be very unlikely, but resp.body can be invalid as a JSON in theory even though the status is successful.
|
106
|
+
# In this case, raise an exception to report that unexpected status.
|
107
|
+
raise Gengo::Exception.new('error', 500, 'unexpected format of server response. Report it to Gengo if this exception repeatedly happens')
|
107
108
|
end
|
108
109
|
|
110
|
+
raise Gengo::Exception.new(json['opstat'], json['err']['code'].to_i, json['err']['msg']) unless json['opstat'] == 'ok'
|
111
|
+
|
112
|
+
# Return it if there are no problems, nice...
|
113
|
+
return json
|
109
114
|
end
|
110
115
|
|
111
116
|
# The "POST" method; handles shuttling up encoded job data to Gengo
|
@@ -152,19 +157,18 @@ module Gengo
|
|
152
157
|
end
|
153
158
|
|
154
159
|
resp = http.request(request)
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
#
|
165
|
-
json
|
166
|
-
|
167
|
-
resp.error!
|
160
|
+
resp.error! unless resp.kind_of?(Net::HTTPSuccess)
|
161
|
+
|
162
|
+
json = JSON.parse(resp.body)
|
163
|
+
return json if json['opstat'] == 'ok'
|
164
|
+
|
165
|
+
case
|
166
|
+
when json['err']['code']
|
167
|
+
raise Gengo::Exception.new(json['opstat'], json['err']['code'].to_i, json['err']['msg'])
|
168
|
+
when json['err'].respond_to?(:each)
|
169
|
+
# Ad-hock care of bulk operations. To be done in a higher-layer in future. [#93504182]
|
170
|
+
err = json['err'].map {|key, value| value.respond_to?(:first) ? value.first : value }
|
171
|
+
raise Gengo::Exception.new(json['opstat'], err.first['code'], err.map{|e| e['msg']}.join(';'))
|
168
172
|
end
|
169
173
|
end
|
170
174
|
|
@@ -262,17 +266,18 @@ module Gengo
|
|
262
266
|
# <tt>action</tt> - A hash describing the update to this job. See the examples for further documentation.
|
263
267
|
def updateTranslationJob(params = {})
|
264
268
|
params[:is_put] = true
|
265
|
-
|
269
|
+
id = params.delete(:id).to_s
|
270
|
+
self.send_to_gengo("translate/job/#{id}", params)
|
266
271
|
end
|
267
272
|
|
268
273
|
# Updates a group of already submitted jobs.
|
269
274
|
#
|
270
275
|
# Options:
|
271
|
-
# <tt>
|
276
|
+
# <tt>job_ids</tt> - An Array of job objects to update (job objects or ids)
|
272
277
|
# <tt>action</tt> - A String describing the update to this job. "approved", "rejected", etc - see Gengo docs.
|
273
278
|
def updateTranslationJobs(params = {})
|
274
279
|
params[:is_put] = true
|
275
|
-
self.send_to_gengo('translate/jobs',
|
280
|
+
self.send_to_gengo('translate/jobs', params)
|
276
281
|
end
|
277
282
|
|
278
283
|
# Given an ID, pulls down information concerning that job from Gengo.
|
@@ -280,35 +285,75 @@ module Gengo
|
|
280
285
|
# <tt>id</tt> - The ID of a job to check.
|
281
286
|
# <tt>pre_mt</tt> - Optional, get a machine translation if the human translation is not done.
|
282
287
|
def getTranslationJob(params = {})
|
283
|
-
|
288
|
+
id = params.delete(:id).to_s
|
289
|
+
self.get_from_gengo("translate/job/#{id}", params)
|
284
290
|
end
|
285
291
|
|
286
|
-
#
|
292
|
+
# Fetches a list of recent jobs you made.
|
293
|
+
#
|
294
|
+
# @deprecated Use {#jobs} or {#query_jobs} instead.
|
287
295
|
#
|
288
|
-
#
|
289
|
-
# <tt>
|
290
|
-
#
|
296
|
+
# == Keyword Parameters
|
297
|
+
# <tt>ids</tt>::
|
298
|
+
# Optional. An array of job IDs to be fetched.
|
299
|
+
# Other parameters are ignored if you specify this parameter.
|
300
|
+
# <tt>status</tt>::
|
301
|
+
# Optional. "unpaid", "available", "pending", "reviewable", "approved", "rejected", or "canceled".
|
302
|
+
# <tt>timestamp_after</tt>::
|
303
|
+
# Optional. Epoch timestamp from which to filter submitted jobs.
|
304
|
+
# <tt>count</tt>::
|
305
|
+
# Optional. Defaults to 10.
|
291
306
|
def getTranslationJobs(params = {})
|
292
|
-
if params[:ids]
|
293
|
-
params
|
294
|
-
self.get_from_gengo('translate/jobs/:ids'.gsub(':ids', params.delete(:ids)))
|
307
|
+
if params[:ids].respond_to?(:each)
|
308
|
+
jobs(params.delete(:ids))
|
295
309
|
else
|
296
|
-
|
310
|
+
query_jobs(params)
|
297
311
|
end
|
298
312
|
end
|
299
313
|
|
300
|
-
#
|
314
|
+
# Fetchs a set of recent jobs whose IDs are the given ones.
|
315
|
+
# @param ids [[Integer|String]] An array of job IDs to be fetched
|
316
|
+
def jobs(ids)
|
317
|
+
get_from_gengo('translate/jobs/%s' % ids.join(','))
|
318
|
+
end
|
319
|
+
|
320
|
+
# Fetchs a set of recent jobs you made.
|
321
|
+
# You can apply filters with the following keyword parameters.
|
322
|
+
#
|
323
|
+
# == Keyword Parameters
|
324
|
+
# <tt>status</tt>::
|
325
|
+
# Optional. Fetches only jobs in this status.
|
326
|
+
# Must be "unpaid", "available", "pending", "reviewable", "approved", "rejected", or "canceled".
|
327
|
+
# <tt>timestamp_after</tt>::
|
328
|
+
# Optional. Epoch timestamp from which to filter submitted jobs.
|
329
|
+
# <tt>count</tt>::
|
330
|
+
# Optional. The maximum number of jobs to be returned. Defaults to 10.
|
331
|
+
def query_jobs(params = {})
|
332
|
+
get_from_gengo('translate/jobs', params)
|
333
|
+
end
|
334
|
+
|
335
|
+
# Fetches a set of jobs in the order you made.
|
336
|
+
#
|
337
|
+
# @deprecated Use {#jobs_in_order} instead.
|
301
338
|
#
|
302
|
-
#
|
339
|
+
# == Required keyword parameters
|
340
|
+
# <tt>order_id</tt> - Required, the ID of a job that you want the batch/group of.
|
303
341
|
def getTranslationOrderJobs(params = {})
|
304
|
-
|
342
|
+
order_id = params[:order_id]
|
343
|
+
raise ArgumentError, 'order_id is a required parameter' unless order_id
|
344
|
+
jobs_in_order(order_id)
|
345
|
+
end
|
346
|
+
|
347
|
+
# Fetches a set of jobs in the order you made.
|
348
|
+
def jobs_in_order(id)
|
349
|
+
self.get_from_gengo("translate/order/#{id}")
|
305
350
|
end
|
306
351
|
|
307
352
|
# Mirrors the bulk Translation call, but just returns an estimated cost.
|
308
353
|
def determineTranslationCost(params = {})
|
309
354
|
is_upload = params.delete(:is_upload)
|
310
355
|
if is_upload
|
311
|
-
self.upload_to_gengo('translate/service/quote
|
356
|
+
self.upload_to_gengo('translate/service/quote', params)
|
312
357
|
else
|
313
358
|
self.send_to_gengo('translate/service/quote', params)
|
314
359
|
end
|
@@ -325,7 +370,8 @@ module Gengo
|
|
325
370
|
# <tt>id</tt> - The ID of the job you're commenting on.
|
326
371
|
# <tt>comment</tt> - The comment to put on the job.
|
327
372
|
def postTranslationJobComment(params = {})
|
328
|
-
|
373
|
+
id = params.delete(:id).to_s
|
374
|
+
self.send_to_gengo("translate/job/#{id}/comment", params)
|
329
375
|
end
|
330
376
|
|
331
377
|
# Get all comments (the history) from a given job.
|
@@ -333,7 +379,8 @@ module Gengo
|
|
333
379
|
# Options:
|
334
380
|
# <tt>id</tt> - The ID of the job to get comments for.
|
335
381
|
def getTranslationJobComments(params = {})
|
336
|
-
|
382
|
+
id = params.delete(:id).to_s
|
383
|
+
self.get_from_gengo("translate/job/#{id}/comments", params)
|
337
384
|
end
|
338
385
|
|
339
386
|
# Returns the feedback you've submitted for a given job.
|
@@ -341,7 +388,8 @@ module Gengo
|
|
341
388
|
# Options:
|
342
389
|
# <tt>id</tt> - The ID of the translation job you're retrieving comments from.
|
343
390
|
def getTranslationJobFeedback(params = {})
|
344
|
-
|
391
|
+
id = params.delete(:id).to_s
|
392
|
+
self.get_from_gengo("translate/job/#{id}/feedback", params)
|
345
393
|
end
|
346
394
|
|
347
395
|
# Gets a list of the revision resources for a job. Revisions are created each time a translator updates the text.
|
@@ -349,7 +397,8 @@ module Gengo
|
|
349
397
|
# Options:
|
350
398
|
# <tt>id</tt> - The ID of the translation job you're getting revisions from.
|
351
399
|
def getTranslationJobRevisions(params = {})
|
352
|
-
|
400
|
+
id = params.delete(:id).to_s
|
401
|
+
self.get_from_gengo("translate/job/#{id}/revisions", params)
|
353
402
|
end
|
354
403
|
|
355
404
|
# Get a specific revision to a job.
|
@@ -358,7 +407,9 @@ module Gengo
|
|
358
407
|
# <tt>id</tt> - The ID of the translation job you're getting revisions from.
|
359
408
|
# <tt>rev_id</tt> - The ID of the revision you're looking up.
|
360
409
|
def getTranslationJobRevision(params = {})
|
361
|
-
|
410
|
+
id = params.delete(:id).to_s
|
411
|
+
revision_id = params.delete(:rev_id).to_s
|
412
|
+
self.get_from_gengo("translate/job/#{id}/revision/#{revision_id}", params)
|
362
413
|
end
|
363
414
|
|
364
415
|
# Deletes an order, cancelling all available jobs.
|
@@ -369,7 +420,26 @@ module Gengo
|
|
369
420
|
# <tt>id</tt> - The ID of the order you want to delete.
|
370
421
|
def deleteTranslationOrder(params = {})
|
371
422
|
params[:is_delete] = true
|
372
|
-
|
423
|
+
id = params.delete(:id).to_s
|
424
|
+
self.get_from_gengo("translate/order/#{id}", params)
|
425
|
+
end
|
426
|
+
|
427
|
+
# Get all comments (the history) from a given order.
|
428
|
+
#
|
429
|
+
# Requirements:
|
430
|
+
# <tt>order_id</tt> - The ID of the order to get comments for.
|
431
|
+
def get_translation_order_comments(order_id)
|
432
|
+
get_from_gengo("translate/order/#{order_id}/comments")
|
433
|
+
end
|
434
|
+
|
435
|
+
# Post a comment for a translator or Gengo on an order.
|
436
|
+
#
|
437
|
+
# Options:
|
438
|
+
# <tt>id</tt> - The ID of the order you're commenting on.
|
439
|
+
# <tt>comment</tt> - The comment to put on the order.
|
440
|
+
def post_translation_order_comment(params = {})
|
441
|
+
id = params.delete(:id).to_s
|
442
|
+
send_to_gengo("translate/order/#{id}/comment", params)
|
373
443
|
end
|
374
444
|
|
375
445
|
# Deletes a job.
|
@@ -378,7 +448,8 @@ module Gengo
|
|
378
448
|
# <tt>id</tt> - The ID of the job you want to delete.
|
379
449
|
def deleteTranslationJob(params = {})
|
380
450
|
params[:is_delete] = true
|
381
|
-
|
451
|
+
id = params.delete(:id).to_s
|
452
|
+
self.get_from_gengo("translate/job/#{id}", params)
|
382
453
|
end
|
383
454
|
|
384
455
|
# Deletes multiple jobs.
|
@@ -415,13 +486,15 @@ module Gengo
|
|
415
486
|
|
416
487
|
# Gets one glossary that belongs to the authenticated user
|
417
488
|
def getGlossary(params = {})
|
418
|
-
|
489
|
+
id = params.delete(:id).to_s
|
490
|
+
self.get_from_gengo("translate/glossary/#{id}", params)
|
419
491
|
end
|
420
492
|
|
421
493
|
# Downloads one glossary that belongs to the authenticated user
|
422
494
|
def getGlossaryFile(params = {})
|
423
495
|
params[:is_download] = true
|
424
|
-
|
496
|
+
id = params.delete(:id).to_s
|
497
|
+
self.get_from_gengo("translate/glossary/download/#{id}", params)
|
425
498
|
end
|
426
499
|
end
|
427
500
|
|
data/lib/gengo-ruby/version.rb
CHANGED
data/test.rb
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
require 'gengo'
|
3
|
+
|
4
|
+
gengo = Gengo::API.new({
|
5
|
+
:public_key => 'cee8d849f2354e0a9ff62f19868194c1',
|
6
|
+
:private_key => 'd0895146e2d9459b908b2c31bab36f52',
|
7
|
+
:sandbox => false,
|
8
|
+
})
|
9
|
+
|
10
|
+
# Return the number of credits left on your account.
|
11
|
+
puts gengo.getAccountBalance()
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gengo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.7.rc1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matthew Romaine
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2015-
|
14
|
+
date: 2015-08-24 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: json
|
@@ -83,6 +83,20 @@ dependencies:
|
|
83
83
|
- - ">="
|
84
84
|
- !ruby/object:Gem::Version
|
85
85
|
version: '0'
|
86
|
+
- !ruby/object:Gem::Dependency
|
87
|
+
name: rake
|
88
|
+
requirement: !ruby/object:Gem::Requirement
|
89
|
+
requirements:
|
90
|
+
- - ">="
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
version: '0'
|
93
|
+
type: :development
|
94
|
+
prerelease: false
|
95
|
+
version_requirements: !ruby/object:Gem::Requirement
|
96
|
+
requirements:
|
97
|
+
- - ">="
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: '0'
|
86
100
|
- !ruby/object:Gem::Dependency
|
87
101
|
name: simplecov
|
88
102
|
requirement: !ruby/object:Gem::Requirement
|
@@ -131,6 +145,7 @@ files:
|
|
131
145
|
- lib/gengo-ruby/version.rb
|
132
146
|
- lib/gengo.rb
|
133
147
|
- licenses/LICENSE.txt
|
148
|
+
- test.rb
|
134
149
|
homepage: http://developers.gengo.com
|
135
150
|
licenses:
|
136
151
|
- New BSD
|
@@ -146,9 +161,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
146
161
|
version: '0'
|
147
162
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
148
163
|
requirements:
|
149
|
-
- - "
|
164
|
+
- - ">"
|
150
165
|
- !ruby/object:Gem::Version
|
151
|
-
version:
|
166
|
+
version: 1.3.1
|
152
167
|
requirements: []
|
153
168
|
rubyforge_project:
|
154
169
|
rubygems_version: 2.4.5
|