atum 0.10.0 → 0.10.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1a8721a2e924867278cb533cb3034412667102f1
4
- data.tar.gz: f4dd36f0ac22cd6c40f297b74ba46fc66c0db9f7
3
+ metadata.gz: c3ec782d60dbd540d0640fc4d5535050fef5ae94
4
+ data.tar.gz: cd781717a286a356f74511d3d9a0e2d5f1eb3ac7
5
5
  SHA512:
6
- metadata.gz: 95faf13627b0272502c1cfcdf818e900e85888aa23a14ccdb86ab80118b56049d4d1d34d6557aebbd9f8eb6f9861843d4afb1abe6e76cd6272806151d259d99c
7
- data.tar.gz: 42a6b15d34aeaceda47f6704d82675deaf9c4add347b6c5c225b9425600d4832b6cf293c626bfda68447d9e16b5889f0fbe9583af2c86b47bd43b28a052e8b60
6
+ metadata.gz: 9536862348f70cfbcf9e76afb1136d5f6b466fff4fee998d06b327aa4281646ebbc051b2b7284a448e43837cf3c05b3e18e1c08fec55b70210c80130f63b8565
7
+ data.tar.gz: 59f9189fdcc9fdad55fba4be7bf5fc7e6ff384eccbb5fdc40b0e866e54643cb298d0df1caddee4fac3fb416b8545934ac1d76cfe2a0fe98bf2bbc756ab3eae60
@@ -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.26'
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'
@@ -5,14 +5,34 @@ module Atum
5
5
  class ResponseError < StandardError; end
6
6
 
7
7
  class ApiError < StandardError
8
- attr_reader :error
8
+ attr_reader :request, :response
9
9
 
10
- def initialize(error)
10
+ def initialize(request: request, response: response)
11
+ @request = request
12
+ @response = response
11
13
  @error = error
12
- if @error.key?('documentation_url')
13
- super("#{@error['message']}, see #{@error['documentation_url']}")
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
- super("#{@error['message']}")
35
+ "#{error['message']}"
16
36
  end
17
37
  end
18
38
  end
@@ -13,6 +13,8 @@ module Atum
13
13
 
14
14
  def request
15
15
  response = Response.new(make_request)
16
+ raise(ApiError, request: options, response: response) if response.error?
17
+
16
18
  return response.body unless response.json?
17
19
 
18
20
  if response.limit.nil?
@@ -6,7 +6,15 @@ module Atum
6
6
  end
7
7
 
8
8
  def body
9
- json? ? handle_json : handle_raw
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
@@ -1,3 +1,3 @@
1
1
  module Atum
2
- VERSION = '0.10.0'
2
+ VERSION = '0.10.1'
3
3
  end
@@ -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(error).message }
7
+ subject { described_class.new(request: nil, response: response).message }
8
8
 
9
- context 'without a documentation url' do
10
- let(:error) { { 'message' => message } }
11
- it { is_expected.to eq(message) }
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 documentation url' do
15
- let(:error) { { 'message' => message, 'documentation_url' => url } }
16
- it { is_expected.to include(message) }
17
- it { is_expected.to include(url) }
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.0
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: 2014-11-25 00:00:00.000000000 Z
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: '0.26'
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: '0.26'
55
+ version: 0.27.0
56
56
  - !ruby/object:Gem::Dependency
57
57
  name: guard
58
58
  requirement: !ruby/object:Gem::Requirement