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 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