gengo 0.0.6 → 0.0.7.rc1
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 +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
|