atum 0.10.0 → 0.10.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/atum.gemspec +1 -1
- data/lib/atum/core/errors.rb +25 -5
- data/lib/atum/core/request.rb +2 -0
- data/lib/atum/core/response.rb +9 -15
- data/lib/atum/version.rb +1 -1
- data/spec/atum/core/errors_spec.rb +35 -8
- data/spec/atum/core/request_spec.rb +15 -0
- data/spec/atum/core/response_spec.rb +0 -12
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c3ec782d60dbd540d0640fc4d5535050fef5ae94
|
4
|
+
data.tar.gz: cd781717a286a356f74511d3d9a0e2d5f1eb3ac7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9536862348f70cfbcf9e76afb1136d5f6b466fff4fee998d06b327aa4281646ebbc051b2b7284a448e43837cf3c05b3e18e1c08fec55b70210c80130f63b8565
|
7
|
+
data.tar.gz: 59f9189fdcc9fdad55fba4be7bf5fc7e6ff384eccbb5fdc40b0e866e54643cb298d0df1caddee4fac3fb416b8545934ac1d76cfe2a0fe98bf2bbc756ab3eae60
|
data/atum.gemspec
CHANGED
@@ -20,7 +20,7 @@ Gem::Specification.new do |spec|
|
|
20
20
|
|
21
21
|
spec.add_development_dependency 'bundler', '~> 1.6'
|
22
22
|
spec.add_development_dependency 'rspec', '~> 3.1'
|
23
|
-
spec.add_development_dependency 'rubocop', '~> 0.
|
23
|
+
spec.add_development_dependency 'rubocop', '~> 0.27.0'
|
24
24
|
spec.add_development_dependency 'guard', '~> 2.6'
|
25
25
|
spec.add_development_dependency 'guard-rspec', '~> 4.3'
|
26
26
|
spec.add_development_dependency 'guard-rubocop', '~> 1.1'
|
data/lib/atum/core/errors.rb
CHANGED
@@ -5,14 +5,34 @@ module Atum
|
|
5
5
|
class ResponseError < StandardError; end
|
6
6
|
|
7
7
|
class ApiError < StandardError
|
8
|
-
attr_reader :
|
8
|
+
attr_reader :request, :response
|
9
9
|
|
10
|
-
def initialize(
|
10
|
+
def initialize(request: request, response: response)
|
11
|
+
@request = request
|
12
|
+
@response = response
|
11
13
|
@error = error
|
12
|
-
|
13
|
-
|
14
|
+
end
|
15
|
+
|
16
|
+
def error
|
17
|
+
@error ||=
|
18
|
+
if response.json?
|
19
|
+
response.body['error']
|
20
|
+
else
|
21
|
+
{
|
22
|
+
'message' => "Something went wrong with this raw request\n" \
|
23
|
+
"status: #{response.status}\n" \
|
24
|
+
"headers: #{response.headers}\n" \
|
25
|
+
"body: #{response.body}"
|
26
|
+
}
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def message
|
31
|
+
return "Unknown error: #{response.body}" unless error
|
32
|
+
if error.key?('documentation_url')
|
33
|
+
"#{error['message']}, see #{error['documentation_url']}"
|
14
34
|
else
|
15
|
-
|
35
|
+
"#{error['message']}"
|
16
36
|
end
|
17
37
|
end
|
18
38
|
end
|
data/lib/atum/core/request.rb
CHANGED
data/lib/atum/core/response.rb
CHANGED
@@ -6,7 +6,15 @@ module Atum
|
|
6
6
|
end
|
7
7
|
|
8
8
|
def body
|
9
|
-
json? ?
|
9
|
+
json? ? json_body : raw_body
|
10
|
+
end
|
11
|
+
|
12
|
+
def status
|
13
|
+
@response.status
|
14
|
+
end
|
15
|
+
|
16
|
+
def headers
|
17
|
+
@response.headers
|
10
18
|
end
|
11
19
|
|
12
20
|
def json?
|
@@ -40,20 +48,6 @@ module Atum
|
|
40
48
|
def raw_body
|
41
49
|
@response.body
|
42
50
|
end
|
43
|
-
|
44
|
-
def handle_json
|
45
|
-
error? ? raise(ApiError, json_body['error']) : json_body
|
46
|
-
end
|
47
|
-
|
48
|
-
def handle_raw
|
49
|
-
default_raw_message = {
|
50
|
-
'message' => "Something went wrong with this raw request\n" \
|
51
|
-
"status: #{@response.status}\n" \
|
52
|
-
"headers: #{@response.headers}\n" \
|
53
|
-
"body: #{@response.body}"
|
54
|
-
}
|
55
|
-
error? ? raise(ApiError, default_raw_message) : raw_body
|
56
|
-
end
|
57
51
|
end
|
58
52
|
end
|
59
53
|
end
|
data/lib/atum/version.rb
CHANGED
@@ -4,16 +4,43 @@ describe Atum::Core::ApiError do
|
|
4
4
|
let(:message) { 'Foo failed' }
|
5
5
|
let(:url) { 'http://example.com/how-to-fix' }
|
6
6
|
|
7
|
-
subject { described_class.new(
|
7
|
+
subject { described_class.new(request: nil, response: response).message }
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
let(:response) { Atum::Core::Response.new(json_response) }
|
10
|
+
let(:json_response) do
|
11
|
+
double(headers: { 'Content-Type' => content_type },
|
12
|
+
body: response_body,
|
13
|
+
status: 500)
|
12
14
|
end
|
13
15
|
|
14
|
-
context 'with a
|
15
|
-
let(:
|
16
|
-
|
17
|
-
|
16
|
+
context 'with a json response' do
|
17
|
+
let(:content_type) { 'application/json' }
|
18
|
+
|
19
|
+
context 'without an error envelope' do
|
20
|
+
let(:response_body) { { 'thing' => { 'message' => message } }.to_json }
|
21
|
+
it { is_expected.to include('Unknown error') }
|
22
|
+
it { is_expected.to include('thing') }
|
23
|
+
end
|
24
|
+
|
25
|
+
context 'without a documentation url' do
|
26
|
+
let(:response_body) { { 'error' => { 'message' => message } }.to_json }
|
27
|
+
it { is_expected.to eq(message) }
|
28
|
+
end
|
29
|
+
|
30
|
+
context 'with a documentation url' do
|
31
|
+
let(:response_body) do
|
32
|
+
{
|
33
|
+
'error' => { 'message' => message, 'documentation_url' => url }
|
34
|
+
}.to_json
|
35
|
+
end
|
36
|
+
it { is_expected.to include(message) }
|
37
|
+
it { is_expected.to include(url) }
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
context 'with a raw response' do
|
42
|
+
let(:content_type) { 'application/text' }
|
43
|
+
let(:response_body) { 'FOOBAR' }
|
44
|
+
it { is_expected.to include(response_body) }
|
18
45
|
end
|
19
46
|
end
|
@@ -56,6 +56,21 @@ describe Atum::Core::Request do
|
|
56
56
|
end
|
57
57
|
end
|
58
58
|
|
59
|
+
context 'when the response is an error' do
|
60
|
+
let(:response) { 'ABCDEFGH' }
|
61
|
+
let(:stub) do
|
62
|
+
stub_request(:get, full_path)
|
63
|
+
.with(query: query)
|
64
|
+
.to_return(body: response,
|
65
|
+
status: 500,
|
66
|
+
headers: { 'Content-Type' => 'application/text' })
|
67
|
+
end
|
68
|
+
|
69
|
+
it 'raises an ApiError' do
|
70
|
+
expect { make_request.call }.to raise_error(Atum::Core::ApiError)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
59
74
|
context 'when the response is not JSON' do
|
60
75
|
let(:response) { 'ABCDEFGH' }
|
61
76
|
let(:stub) do
|
@@ -28,18 +28,6 @@ describe Atum::Core::Response do
|
|
28
28
|
it 'should come through raw' do
|
29
29
|
expect(body).to eq(response_body)
|
30
30
|
end
|
31
|
-
|
32
|
-
context 'when the response is an error' do
|
33
|
-
let(:response) do
|
34
|
-
double(headers: { 'Content-Type' => 'application/text' },
|
35
|
-
body: 'FOOBARBAZ', status: 400)
|
36
|
-
end
|
37
|
-
|
38
|
-
it 'should raise an error' do
|
39
|
-
expect { api_response.body }.to raise_error(Atum::Core::ApiError,
|
40
|
-
/FOOBARBAZ/)
|
41
|
-
end
|
42
|
-
end
|
43
31
|
end
|
44
32
|
end
|
45
33
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: atum
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.10.
|
4
|
+
version: 0.10.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- isaacseymour
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2015-04-07 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -45,14 +45,14 @@ dependencies:
|
|
45
45
|
requirements:
|
46
46
|
- - ~>
|
47
47
|
- !ruby/object:Gem::Version
|
48
|
-
version:
|
48
|
+
version: 0.27.0
|
49
49
|
type: :development
|
50
50
|
prerelease: false
|
51
51
|
version_requirements: !ruby/object:Gem::Requirement
|
52
52
|
requirements:
|
53
53
|
- - ~>
|
54
54
|
- !ruby/object:Gem::Version
|
55
|
-
version:
|
55
|
+
version: 0.27.0
|
56
56
|
- !ruby/object:Gem::Dependency
|
57
57
|
name: guard
|
58
58
|
requirement: !ruby/object:Gem::Requirement
|