speechmatics 0.2.0 → 0.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.
- checksums.yaml +4 -4
- data/README.md +6 -0
- data/lib/speechmatics.rb +2 -0
- data/lib/speechmatics/api.rb +1 -1
- data/lib/speechmatics/response.rb +9 -12
- data/lib/speechmatics/response/error.rb +46 -0
- data/lib/speechmatics/response/error/bad_gateway.rb +8 -0
- data/lib/speechmatics/response/error/cannot_align.rb +8 -0
- data/lib/speechmatics/response/error/insufficient_credit.rb +8 -0
- data/lib/speechmatics/response/error/internal_server_error.rb +8 -0
- data/lib/speechmatics/response/error/invalid_audio.rb +8 -0
- data/lib/speechmatics/response/error/job_in_progress.rb +8 -0
- data/lib/speechmatics/response/error/job_not_found.rb +8 -0
- data/lib/speechmatics/response/error/malformed_request.rb +8 -0
- data/lib/speechmatics/response/error/missing_callback.rb +8 -0
- data/lib/speechmatics/response/error/missing_data_file.rb +8 -0
- data/lib/speechmatics/response/error/missing_language.rb +8 -0
- data/lib/speechmatics/response/error/not_alignment_job.rb +8 -0
- data/lib/speechmatics/response/error/product_not_available.rb +8 -0
- data/lib/speechmatics/response/error/rejected_on_submission.rb +8 -0
- data/lib/speechmatics/response/error/service_unavailable.rb +8 -0
- data/lib/speechmatics/response/error/too_many_requests.rb +8 -0
- data/lib/speechmatics/response/error/unauthorized.rb +8 -0
- data/lib/speechmatics/response/error/unknown.rb +7 -0
- data/lib/speechmatics/response/error/unsupported_output_format.rb +8 -0
- data/lib/speechmatics/version.rb +1 -1
- data/speechmatics.gemspec +1 -0
- data/test/response/error_test.rb +94 -0
- data/test/response_test.rb +27 -0
- data/test/test_helper.rb +4 -0
- metadata +41 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e754cb933758ea9ee1d9c6425fd294bc4c1431bd
|
4
|
+
data.tar.gz: 41b3c4c00034d9a6094b24b44f6586f658f9bafb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 13e42ae2ee8a6c501a21a537e314ccfb5f2ba3faae4a8cf538d6b1c0ce8c0e6cb337ceb50f6f348509aaa2aa0ebc76e5957938a4d99e40c38832c067551cff17
|
7
|
+
data.tar.gz: 919864f0a5588bd41547294e4775e6b0e8522bef2befa477a4976991ffcd399a9176bae238cc13c8c0a9b794110d12f357cfe0d3e94b7734d2fe3eb47c8df1fe
|
data/README.md
CHANGED
@@ -73,6 +73,12 @@ trans = c.user.jobs.transcript(5678)
|
|
73
73
|
|
74
74
|
## Changes
|
75
75
|
|
76
|
+
* 0.2.1 - 13 Sept 2017
|
77
|
+
- Updated error handling with a class for each error type. Thanks @mziwisky
|
78
|
+
|
79
|
+
* 0.2.0 - 10/12/2016
|
80
|
+
- Added alignment support, thanks @rogerz42892
|
81
|
+
|
76
82
|
* 0.1.4 - 8/21/2015
|
77
83
|
- Add support for video files.
|
78
84
|
|
data/lib/speechmatics.rb
CHANGED
@@ -7,6 +7,8 @@ require "speechmatics/version"
|
|
7
7
|
require 'speechmatics/configuration'
|
8
8
|
require 'speechmatics/connection'
|
9
9
|
require 'speechmatics/response'
|
10
|
+
require 'speechmatics/response/error'
|
11
|
+
Gem.find_files('speechmatics/response/error/*.rb').each { |path| require path }
|
10
12
|
require 'speechmatics/api'
|
11
13
|
require 'speechmatics/api_factory'
|
12
14
|
require 'speechmatics/client'
|
data/lib/speechmatics/api.rb
CHANGED
@@ -48,7 +48,7 @@ module Speechmatics
|
|
48
48
|
request.body = params[:data]
|
49
49
|
end
|
50
50
|
end
|
51
|
-
Speechmatics::Response.
|
51
|
+
Speechmatics::Response.parse(response, {api: self, method: method, path: path, params: params})
|
52
52
|
end
|
53
53
|
|
54
54
|
def base_path
|
@@ -2,25 +2,22 @@
|
|
2
2
|
|
3
3
|
module Speechmatics
|
4
4
|
class Response
|
5
|
+
|
6
|
+
def self.parse(response, request={})
|
7
|
+
new(response, request).tap do |res|
|
8
|
+
res.check_for_error
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
5
12
|
attr_accessor :raw, :request
|
6
13
|
|
7
14
|
def initialize(response, request={})
|
8
15
|
@raw = response
|
9
16
|
@request = request
|
10
|
-
|
11
|
-
check_for_error(response)
|
12
17
|
end
|
13
18
|
|
14
|
-
def check_for_error
|
15
|
-
|
16
|
-
case status_code_type
|
17
|
-
when "2"
|
18
|
-
# puts "all is well, status: #{response.status}"
|
19
|
-
when "4", "5"
|
20
|
-
raise "Whoops, error back from Speechmatics: #{response.status}"
|
21
|
-
else
|
22
|
-
raise "Unrecongized status code: #{response.status}"
|
23
|
-
end
|
19
|
+
def check_for_error
|
20
|
+
raise Error.classify(self) if raw.status >= 400
|
24
21
|
end
|
25
22
|
|
26
23
|
def body
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
module Speechmatics
|
4
|
+
class Response
|
5
|
+
class Error < StandardError
|
6
|
+
TYPES = []
|
7
|
+
|
8
|
+
class << self
|
9
|
+
def inherited(subclass)
|
10
|
+
TYPES << subclass
|
11
|
+
end
|
12
|
+
|
13
|
+
def classify(response)
|
14
|
+
klass = TYPES.find { |t| t.matches?(response) } || Unknown
|
15
|
+
klass.new(response)
|
16
|
+
end
|
17
|
+
|
18
|
+
def matches?(response)
|
19
|
+
matches_status?(response.raw.status) &&
|
20
|
+
matches_message?(error_message(response))
|
21
|
+
end
|
22
|
+
|
23
|
+
def matches_status?(status)
|
24
|
+
self::ERROR_STATUS == status
|
25
|
+
end
|
26
|
+
|
27
|
+
def matches_message?(message)
|
28
|
+
self::ERROR_MESSAGE == message
|
29
|
+
end
|
30
|
+
|
31
|
+
def error_message(response)
|
32
|
+
response['error']
|
33
|
+
rescue
|
34
|
+
''
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
attr_reader :response
|
39
|
+
|
40
|
+
def initialize(response)
|
41
|
+
@response = response
|
42
|
+
super self.class.error_message(response)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
data/lib/speechmatics/version.rb
CHANGED
data/speechmatics.gemspec
CHANGED
@@ -28,6 +28,7 @@ Gem::Specification.new do |spec|
|
|
28
28
|
|
29
29
|
spec.add_development_dependency "bundler", "~> 1.3"
|
30
30
|
spec.add_development_dependency "rake"
|
31
|
+
spec.add_development_dependency "byebug"
|
31
32
|
|
32
33
|
spec.add_development_dependency('minitest')
|
33
34
|
spec.add_development_dependency('simplecov')
|
@@ -0,0 +1,94 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
|
4
|
+
|
5
|
+
describe Speechmatics::Response::Error do
|
6
|
+
described_class = Speechmatics::Response::Error
|
7
|
+
|
8
|
+
describe '::classify' do
|
9
|
+
# see error table at https://app.speechmatics.com/api-details#errorCodes
|
10
|
+
|
11
|
+
describe '4xx errors' do
|
12
|
+
tests = [{
|
13
|
+
response: {status: 400, error: 'Malformed request'},
|
14
|
+
error_class: described_class::MalformedRequest
|
15
|
+
},{
|
16
|
+
response: {status: 400, error: 'Missing data_file'},
|
17
|
+
error_class: described_class::MissingDataFile
|
18
|
+
},{
|
19
|
+
response: {status: 400, error: 'No language selected'},
|
20
|
+
error_class: described_class::MissingLanguage
|
21
|
+
},{
|
22
|
+
response: {status: 400, error: 'Missing callback'},
|
23
|
+
error_class: described_class::MissingCallback
|
24
|
+
},{
|
25
|
+
response: {status: 400, error: 'Requested product not available'},
|
26
|
+
error_class: described_class::ProductNotAvailable
|
27
|
+
},{
|
28
|
+
response: {status: 401, error: 'Invalid User Id or Token'},
|
29
|
+
error_class: described_class::Unauthorized
|
30
|
+
},{
|
31
|
+
response: {status: 403, error: 'Job rejected due to invalid audio'},
|
32
|
+
error_class: described_class::InvalidAudio
|
33
|
+
},{
|
34
|
+
response: {status: 403, error: 'Insufficient Credit'},
|
35
|
+
error_class: described_class::InsufficientCredit
|
36
|
+
},{
|
37
|
+
response: {status: 404, error: 'Job not found'},
|
38
|
+
error_class: described_class::JobNotFound
|
39
|
+
},{
|
40
|
+
response: {status: 404, error: 'Text could not be aligned to audio'},
|
41
|
+
error_class: described_class::CannotAlign
|
42
|
+
},{
|
43
|
+
response: {status: 404, error: 'Job was rejected on submission'},
|
44
|
+
error_class: described_class::RejectedOnSubmission
|
45
|
+
},{
|
46
|
+
response: {status: 404, error: 'Job is not of type alignment'},
|
47
|
+
error_class: described_class::NotAlignmentJob
|
48
|
+
},{
|
49
|
+
response: {status: 404, error: 'Job In Progress'},
|
50
|
+
error_class: described_class::JobInProgress
|
51
|
+
},{
|
52
|
+
response: {status: 404, error: 'Output format Not Supported'},
|
53
|
+
error_class: described_class::UnsupportedOutputFormat
|
54
|
+
},{
|
55
|
+
response: {status: 429, error: 'Too Many requests'},
|
56
|
+
error_class: described_class::TooManyRequests
|
57
|
+
}]
|
58
|
+
|
59
|
+
tests.each do |t|
|
60
|
+
it "correctly classifies #{t[:response][:status]}: #{t[:response][:error]}" do
|
61
|
+
raw_response = raw_response_stub(
|
62
|
+
t[:response][:status],
|
63
|
+
{ 'error' => t[:response][:error] }
|
64
|
+
)
|
65
|
+
response = Speechmatics::Response.new(raw_response)
|
66
|
+
err = described_class.classify(response)
|
67
|
+
err.class.must_equal t[:error_class]
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
describe '5xx errors' do
|
73
|
+
tests = [{
|
74
|
+
status: 500,
|
75
|
+
error_class: described_class::InternalServerError
|
76
|
+
},{
|
77
|
+
status: 502,
|
78
|
+
error_class: described_class::BadGateway
|
79
|
+
},{
|
80
|
+
status: 503,
|
81
|
+
error_class: described_class::ServiceUnavailable
|
82
|
+
}]
|
83
|
+
|
84
|
+
tests.each do |t|
|
85
|
+
it "correctly classifies status #{t[:status]}" do
|
86
|
+
raw_response = raw_response_stub(t[:status])
|
87
|
+
response = Speechmatics::Response.new(raw_response)
|
88
|
+
err = described_class.classify(response)
|
89
|
+
err.class.must_equal t[:error_class]
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
require File.expand_path(File.dirname(__FILE__) + '/test_helper')
|
4
|
+
|
5
|
+
describe Speechmatics::Response do
|
6
|
+
describe '::parse' do
|
7
|
+
describe 'with an error response' do
|
8
|
+
let(:response) { raw_response_stub(422) }
|
9
|
+
|
10
|
+
it 'raises a Speechmatics::Response::Error' do
|
11
|
+
lambda {
|
12
|
+
Speechmatics::Response.parse(response)
|
13
|
+
}.must_raise Speechmatics::Response::Error
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
describe 'with an successful response' do
|
18
|
+
let(:response) { raw_response_stub(200, 'good stuff') }
|
19
|
+
|
20
|
+
it 'returns a Response object' do
|
21
|
+
res = Speechmatics::Response.parse(response)
|
22
|
+
res.class.must_equal Speechmatics::Response
|
23
|
+
res.body.must_equal 'good stuff'
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
data/test/test_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: speechmatics
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Kuklewicz
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-09-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
@@ -136,6 +136,20 @@ dependencies:
|
|
136
136
|
- - ">="
|
137
137
|
- !ruby/object:Gem::Version
|
138
138
|
version: '0'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: byebug
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - ">="
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0'
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - ">="
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '0'
|
139
153
|
- !ruby/object:Gem::Dependency
|
140
154
|
name: minitest
|
141
155
|
requirement: !ruby/object:Gem::Requirement
|
@@ -184,12 +198,34 @@ files:
|
|
184
198
|
- lib/speechmatics/connection.rb
|
185
199
|
- lib/speechmatics/resource.rb
|
186
200
|
- lib/speechmatics/response.rb
|
201
|
+
- lib/speechmatics/response/error.rb
|
202
|
+
- lib/speechmatics/response/error/bad_gateway.rb
|
203
|
+
- lib/speechmatics/response/error/cannot_align.rb
|
204
|
+
- lib/speechmatics/response/error/insufficient_credit.rb
|
205
|
+
- lib/speechmatics/response/error/internal_server_error.rb
|
206
|
+
- lib/speechmatics/response/error/invalid_audio.rb
|
207
|
+
- lib/speechmatics/response/error/job_in_progress.rb
|
208
|
+
- lib/speechmatics/response/error/job_not_found.rb
|
209
|
+
- lib/speechmatics/response/error/malformed_request.rb
|
210
|
+
- lib/speechmatics/response/error/missing_callback.rb
|
211
|
+
- lib/speechmatics/response/error/missing_data_file.rb
|
212
|
+
- lib/speechmatics/response/error/missing_language.rb
|
213
|
+
- lib/speechmatics/response/error/not_alignment_job.rb
|
214
|
+
- lib/speechmatics/response/error/product_not_available.rb
|
215
|
+
- lib/speechmatics/response/error/rejected_on_submission.rb
|
216
|
+
- lib/speechmatics/response/error/service_unavailable.rb
|
217
|
+
- lib/speechmatics/response/error/too_many_requests.rb
|
218
|
+
- lib/speechmatics/response/error/unauthorized.rb
|
219
|
+
- lib/speechmatics/response/error/unknown.rb
|
220
|
+
- lib/speechmatics/response/error/unsupported_output_format.rb
|
187
221
|
- lib/speechmatics/user.rb
|
188
222
|
- lib/speechmatics/user/jobs.rb
|
189
223
|
- lib/speechmatics/version.rb
|
190
224
|
- speechmatics.gemspec
|
191
225
|
- test/api_test.rb
|
192
226
|
- test/client_test.rb
|
227
|
+
- test/response/error_test.rb
|
228
|
+
- test/response_test.rb
|
193
229
|
- test/test_helper.rb
|
194
230
|
- test/user/jobs_test.rb
|
195
231
|
- test/user_test.rb
|
@@ -215,13 +251,15 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
215
251
|
version: '0'
|
216
252
|
requirements: []
|
217
253
|
rubyforge_project:
|
218
|
-
rubygems_version: 2.
|
254
|
+
rubygems_version: 2.4.5.2
|
219
255
|
signing_key:
|
220
256
|
specification_version: 4
|
221
257
|
summary: 'Ruby client for Speechmatics API: https://speechmatics.com/api-details'
|
222
258
|
test_files:
|
223
259
|
- test/api_test.rb
|
224
260
|
- test/client_test.rb
|
261
|
+
- test/response/error_test.rb
|
262
|
+
- test/response_test.rb
|
225
263
|
- test/test_helper.rb
|
226
264
|
- test/user/jobs_test.rb
|
227
265
|
- test/user_test.rb
|