gds-api-adapters 14.5.0 → 14.6.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -21,10 +21,17 @@ module GdsApi
21
21
  end
22
22
  end
23
23
 
24
- class HTTPNotFound < HTTPErrorResponse
24
+ class HTTPClientError < HTTPErrorResponse
25
25
  end
26
26
 
27
- class HTTPGone < HTTPErrorResponse; end
27
+ class HTTPServerError < HTTPErrorResponse
28
+ end
29
+
30
+ class HTTPNotFound < HTTPClientError
31
+ end
32
+
33
+ class HTTPGone < HTTPClientError
34
+ end
28
35
 
29
36
  class NoBearerToken < BaseError; end
30
37
 
@@ -38,5 +45,23 @@ module GdsApi
38
45
  def ignoring_missing(&block)
39
46
  ignoring([HTTPNotFound, HTTPGone], &block)
40
47
  end
48
+
49
+ def build_specific_http_error(error, url, details = nil)
50
+ message = "url: #{url}\n#{error.http_body}"
51
+ code = error.http_code
52
+
53
+ case code
54
+ when 404
55
+ GdsApi::HTTPNotFound.new(code, message, details)
56
+ when 410
57
+ GdsApi::HTTPGone.new(code, message, details)
58
+ when (400..499)
59
+ GdsApi::HTTPClientError.new(code, message, details)
60
+ when (500..599)
61
+ GdsApi::HTTPServerError.new(code, message, details)
62
+ else
63
+ GdsApi::HTTPErrorResponse.new(code, message, details)
64
+ end
65
+ end
41
66
  end
42
67
  end
@@ -109,15 +109,8 @@ module GdsApi
109
109
  private
110
110
  def do_raw_request(method, url, params = nil)
111
111
  response = do_request(method, url, params)
112
-
113
- rescue RestClient::ResourceNotFound => e
114
- raise GdsApi::HTTPNotFound.new(e.http_code, "url: #{url}")
115
-
116
- rescue RestClient::Gone => e
117
- raise GdsApi::HTTPGone.new(e.http_code, "url: #{url}")
118
-
119
112
  rescue RestClient::Exception => e
120
- raise GdsApi::HTTPErrorResponse.new(e.response.code.to_i, "url: #{url}\n#{e.response.body}")
113
+ raise build_specific_http_error(e, url)
121
114
  end
122
115
 
123
116
  # method: the symbolic name of the method to use, e.g. :get, :post
@@ -130,13 +123,6 @@ module GdsApi
130
123
 
131
124
  begin
132
125
  response = do_request_with_cache(method, url, (params.to_json if params), additional_headers)
133
-
134
- rescue RestClient::ResourceNotFound => e
135
- raise GdsApi::HTTPNotFound.new(e.http_code, "url: #{url}")
136
-
137
- rescue RestClient::Gone => e
138
- raise GdsApi::HTTPGone.new(e.http_code, "url: #{url}")
139
-
140
126
  rescue RestClient::Exception => e
141
127
  # Attempt to parse the body as JSON if possible
142
128
  error_details = begin
@@ -144,7 +130,7 @@ module GdsApi
144
130
  rescue JSON::ParserError
145
131
  nil
146
132
  end
147
- raise GdsApi::HTTPErrorResponse.new(e.http_code, "url: #{url}\n#{e.http_body}", error_details)
133
+ raise build_specific_http_error(e, url, error_details)
148
134
  end
149
135
 
150
136
  # If no custom response is given, just instantiate Response
data/lib/gds_api/mapit.rb CHANGED
@@ -8,7 +8,7 @@ class GdsApi::Mapit < GdsApi::Base
8
8
  return Location.new(response) unless response.nil?
9
9
  rescue GdsApi::HTTPErrorResponse => e
10
10
  # allow 400 errors, as they can be invalid postcodes people have entered
11
- raise GdsApi::HTTPErrorResponse.new(e.code) unless e.code == 400
11
+ raise e unless e.code == 400
12
12
  end
13
13
 
14
14
  def areas_for_type(type)
@@ -1,3 +1,3 @@
1
1
  module GdsApi
2
- VERSION = '14.5.0'
2
+ VERSION = '14.6.0'
3
3
  end
@@ -628,7 +628,7 @@ describe GdsApi::ContentApi do
628
628
  stub_request(:get, %r{\A#{@base_api_url}/business_support_schemes.json}).
629
629
  to_return(:status => 503, :body => "Gateway timeout")
630
630
 
631
- assert_raises GdsApi::HTTPErrorResponse do
631
+ assert_raises GdsApi::HTTPServerError do
632
632
  @api.business_support_schemes(['foo', 'bar'])
633
633
  end
634
634
  end
@@ -682,7 +682,7 @@ describe GdsApi::ContentApi do
682
682
  stub_request(:get, %r[\A#{@base_api_url}/licences]).
683
683
  to_return(:status => [503, "Service temporarily unabailable"])
684
684
 
685
- assert_raises GdsApi::HTTPErrorResponse do
685
+ assert_raises GdsApi::HTTPServerError do
686
686
  @api.licences_for_ids([123,124])
687
687
  end
688
688
  end
@@ -4,7 +4,7 @@ require "gds_api/fact_cave"
4
4
  describe GdsApi::FactCave do
5
5
  it "should raise an exception if the service at the fact cave URI returns a 500" do
6
6
  stub_request(:get, /example.com\/facts/).to_return(status: [500, "Internal Server Error"])
7
- assert_raises(GdsApi::HTTPErrorResponse) do
7
+ assert_raises(GdsApi::HTTPServerError) do
8
8
  GdsApi::FactCave.new("http://example.com").fact("foo")
9
9
  end
10
10
  end
@@ -22,7 +22,7 @@ describe GdsApi::FactCave do
22
22
  end
23
23
 
24
24
  it "should return the fact deserialized from json" do
25
- fact_cave_result = {"id" => "vat-rate", "title" => "VAT rate", "details" => {
25
+ fact_cave_result = {"id" => "vat-rate", "title" => "VAT rate", "details" => {
26
26
  "value" => "20%", "description" => "Value Added Tax rate" }}
27
27
  stub_request(:get, "http://example.com/facts/vat-rate").to_return(body: fact_cave_result.to_json)
28
28
  result = GdsApi::FactCave.new("http://example.com").fact("vat-rate")
@@ -341,7 +341,7 @@ class JsonClientTest < MiniTest::Spec
341
341
  def test_get_should_raise_error_if_non_404_non_410_error_code_returned_from_endpoint
342
342
  url = "http://some.endpoint/some.json"
343
343
  stub_request(:get, url).to_return(:body => "{}", :status => 500)
344
- assert_raises GdsApi::HTTPErrorResponse do
344
+ assert_raises GdsApi::HTTPServerError do
345
345
  @client.get_json(url)
346
346
  end
347
347
  end
@@ -452,7 +452,7 @@ class JsonClientTest < MiniTest::Spec
452
452
  def test_post_should_raise_error_if_non_404_error_code_returned_from_endpoint
453
453
  url = "http://some.endpoint/some.json"
454
454
  stub_request(:post, url).to_return(:body => "{}", :status => 500)
455
- assert_raises GdsApi::HTTPErrorResponse do
455
+ assert_raises GdsApi::HTTPServerError do
456
456
  @client.post_json(url, {})
457
457
  end
458
458
  end
@@ -479,7 +479,7 @@ class JsonClientTest < MiniTest::Spec
479
479
  def test_put_should_raise_error_if_non_404_error_code_returned_from_endpoint
480
480
  url = "http://some.endpoint/some.json"
481
481
  stub_request(:put, url).to_return(:body => "{}", :status => 500)
482
- assert_raises GdsApi::HTTPErrorResponse do
482
+ assert_raises GdsApi::HTTPServerError do
483
483
  @client.put_json(url, {})
484
484
  end
485
485
  end
@@ -690,7 +690,7 @@ class JsonClientTest < MiniTest::Spec
690
690
  url = "http://some.endpoint/some.json"
691
691
  stub_request(:post, url).to_return(:body => '', :status => 500)
692
692
 
693
- assert_raises GdsApi::HTTPErrorResponse do
693
+ assert_raises GdsApi::HTTPServerError do
694
694
  @client.post_multipart("http://some.endpoint/some.json", {"a" => "123"})
695
695
  end
696
696
  end
@@ -719,7 +719,7 @@ class JsonClientTest < MiniTest::Spec
719
719
  url = "http://some.endpoint/some.json"
720
720
  stub_request(:put, url).to_return(:body => '', :status => 500)
721
721
 
722
- assert_raises GdsApi::HTTPErrorResponse do
722
+ assert_raises GdsApi::HTTPServerError do
723
723
  @client.put_multipart("http://some.endpoint/some.json", {"a" => "123"})
724
724
  end
725
725
  end
@@ -183,7 +183,7 @@ EOS
183
183
  def test_should_raise_exception_on_api_error
184
184
  licence_returns_error("866-5-1")
185
185
 
186
- assert_raises GdsApi::HTTPErrorResponse do
186
+ assert_raises GdsApi::HTTPServerError do
187
187
  api.details_for_licence("866-5-1")
188
188
  end
189
189
  end
@@ -42,7 +42,7 @@ describe GdsApi::PerformancePlatform::DataIn do
42
42
 
43
43
  it "throws an exception when the support app isn't available" do
44
44
  stub_pp_isnt_available
45
- assert_raises(GdsApi::HTTPErrorResponse) { @api.submit_service_feedback_day_aggregate("doesnt_matter", {}) }
45
+ assert_raises(GdsApi::HTTPServerError) { @api.submit_service_feedback_day_aggregate("doesnt_matter", {}) }
46
46
  end
47
47
 
48
48
  it "throws an exception when the the bucket for that slug hasn't been defined" do
@@ -10,7 +10,7 @@ describe GdsApi::Rummager do
10
10
 
11
11
  it "should raise an exception if the service at the search URI returns a 500" do
12
12
  stub_request(:get, /example.com\/search/).to_return(status: [500, "Internal Server Error"])
13
- assert_raises(GdsApi::HTTPErrorResponse) do
13
+ assert_raises(GdsApi::HTTPServerError) do
14
14
  GdsApi::Rummager.new("http://example.com").search("query")
15
15
  end
16
16
  end
@@ -87,7 +87,7 @@ describe GdsApi::Rummager do
87
87
 
88
88
  it "#advanced_search should raise an exception if the service at the search URI returns a 500" do
89
89
  stub_request(:get, /example.com\/advanced_search/).to_return(status: [500, "Internal Server Error"])
90
- assert_raises(GdsApi::HTTPErrorResponse) do
90
+ assert_raises(GdsApi::HTTPServerError) do
91
91
  GdsApi::Rummager.new("http://example.com").advanced_search({keywords: "query"})
92
92
  end
93
93
  end
@@ -145,7 +145,7 @@ describe GdsApi::Rummager do
145
145
 
146
146
  it "#unified_search should raise an exception if the service at the search URI returns a 500" do
147
147
  stub_request(:get, /example.com\/unified_search.json/).to_return(status: [500, "Internal Server Error"])
148
- assert_raises(GdsApi::HTTPErrorResponse) do
148
+ assert_raises(GdsApi::HTTPServerError) do
149
149
  GdsApi::Rummager.new("http://example.com").unified_search(q: "query")
150
150
  end
151
151
  end
@@ -162,7 +162,7 @@ describe GdsApi::Rummager do
162
162
  status: [400, "Bad Request"],
163
163
  body: %q("error":"Filtering by \"coffee\" is not allowed"),
164
164
  )
165
- assert_raises(GdsApi::HTTPErrorResponse) do
165
+ assert_raises(GdsApi::HTTPClientError) do
166
166
  GdsApi::Rummager.new("http://example.com").unified_search(q: "query", filter_coffee: "tea")
167
167
  end
168
168
  end
@@ -172,7 +172,7 @@ describe GdsApi::Rummager do
172
172
  status: [422, "Bad Request"],
173
173
  body: %q("error":"Filtering by \"coffee\" is not allowed"),
174
174
  )
175
- assert_raises(GdsApi::HTTPErrorResponse) do
175
+ assert_raises(GdsApi::HTTPClientError) do
176
176
  GdsApi::Rummager.new("http://example.com").unified_search(q: "query", filter_coffee: "tea")
177
177
  end
178
178
  end
@@ -25,6 +25,6 @@ describe GdsApi::SupportApi do
25
25
  it "throws an exception when the support app isn't available" do
26
26
  support_api_isnt_available
27
27
 
28
- assert_raises(GdsApi::HTTPErrorResponse) { @api.create_service_feedback({}) }
28
+ assert_raises(GdsApi::HTTPServerError) { @api.create_service_feedback({}) }
29
29
  end
30
30
  end
data/test/support_test.rb CHANGED
@@ -25,7 +25,7 @@ describe GdsApi::Support do
25
25
  it "throws an exception when the support app isn't available" do
26
26
  support_isnt_available
27
27
 
28
- assert_raises(GdsApi::HTTPErrorResponse) { @api.create_foi_request({}) }
28
+ assert_raises(GdsApi::HTTPServerError) { @api.create_foi_request({}) }
29
29
  end
30
30
 
31
31
  it "can report a problem" do
@@ -67,7 +67,7 @@ describe GdsApi::Support do
67
67
  it "throws an exception when the support app isn't available" do
68
68
  support_isnt_available
69
69
 
70
- assert_raises(GdsApi::HTTPErrorResponse) { @api.create_problem_report({}) }
70
+ assert_raises(GdsApi::HTTPServerError) { @api.create_problem_report({}) }
71
71
  end
72
72
 
73
73
  it "can pass service feedback" do
@@ -85,7 +85,7 @@ describe GdsApi::Support do
85
85
  it "throws an exception when the support app isn't available" do
86
86
  support_isnt_available
87
87
 
88
- assert_raises(GdsApi::HTTPErrorResponse) { @api.create_service_feedback({}) }
88
+ assert_raises(GdsApi::HTTPServerError) { @api.create_service_feedback({}) }
89
89
  end
90
90
 
91
91
  it "gets the correct feedback URL" do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gds-api-adapters
3
3
  version: !ruby/object:Gem::Version
4
- version: 14.5.0
4
+ version: 14.6.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-09-12 00:00:00.000000000 Z
12
+ date: 2014-09-15 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: plek
16
- requirement: &12009420 !ruby/object:Gem::Requirement
16
+ requirement: &9869000 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *12009420
24
+ version_requirements: *9869000
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: null_logger
27
- requirement: &12008540 !ruby/object:Gem::Requirement
27
+ requirement: &9868020 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *12008540
35
+ version_requirements: *9868020
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: link_header
38
- requirement: &12007360 !ruby/object:Gem::Requirement
38
+ requirement: &9867040 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *12007360
46
+ version_requirements: *9867040
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: lrucache
49
- requirement: &12006380 !ruby/object:Gem::Requirement
49
+ requirement: &9866000 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: 0.1.1
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *12006380
57
+ version_requirements: *9866000
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: rest-client
60
- requirement: &12003620 !ruby/object:Gem::Requirement
60
+ requirement: &9863120 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ~>
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: 1.6.3
66
66
  type: :runtime
67
67
  prerelease: false
68
- version_requirements: *12003620
68
+ version_requirements: *9863120
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rack-cache
71
- requirement: &12003060 !ruby/object:Gem::Requirement
71
+ requirement: &9862600 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ! '>='
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: '0'
77
77
  type: :runtime
78
78
  prerelease: false
79
- version_requirements: *12003060
79
+ version_requirements: *9862600
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: rdoc
82
- requirement: &12013840 !ruby/object:Gem::Requirement
82
+ requirement: &9874660 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - =
@@ -87,10 +87,10 @@ dependencies:
87
87
  version: '3.12'
88
88
  type: :development
89
89
  prerelease: false
90
- version_requirements: *12013840
90
+ version_requirements: *9874660
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: rake
93
- requirement: &12043140 !ruby/object:Gem::Requirement
93
+ requirement: &9871020 !ruby/object:Gem::Requirement
94
94
  none: false
95
95
  requirements:
96
96
  - - ~>
@@ -98,10 +98,10 @@ dependencies:
98
98
  version: 0.9.2.2
99
99
  type: :development
100
100
  prerelease: false
101
- version_requirements: *12043140
101
+ version_requirements: *9871020
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: webmock
104
- requirement: &12042300 !ruby/object:Gem::Requirement
104
+ requirement: &9869460 !ruby/object:Gem::Requirement
105
105
  none: false
106
106
  requirements:
107
107
  - - ~>
@@ -109,10 +109,10 @@ dependencies:
109
109
  version: '1.8'
110
110
  type: :development
111
111
  prerelease: false
112
- version_requirements: *12042300
112
+ version_requirements: *9869460
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: mocha
115
- requirement: &12041580 !ruby/object:Gem::Requirement
115
+ requirement: &9902240 !ruby/object:Gem::Requirement
116
116
  none: false
117
117
  requirements:
118
118
  - - ~>
@@ -120,10 +120,10 @@ dependencies:
120
120
  version: 0.12.4
121
121
  type: :development
122
122
  prerelease: false
123
- version_requirements: *12041580
123
+ version_requirements: *9902240
124
124
  - !ruby/object:Gem::Dependency
125
125
  name: minitest
126
- requirement: &12040900 !ruby/object:Gem::Requirement
126
+ requirement: &9901480 !ruby/object:Gem::Requirement
127
127
  none: false
128
128
  requirements:
129
129
  - - ~>
@@ -131,10 +131,10 @@ dependencies:
131
131
  version: 3.4.0
132
132
  type: :development
133
133
  prerelease: false
134
- version_requirements: *12040900
134
+ version_requirements: *9901480
135
135
  - !ruby/object:Gem::Dependency
136
136
  name: rack
137
- requirement: &12040220 !ruby/object:Gem::Requirement
137
+ requirement: &9901000 !ruby/object:Gem::Requirement
138
138
  none: false
139
139
  requirements:
140
140
  - - ! '>='
@@ -142,10 +142,10 @@ dependencies:
142
142
  version: '0'
143
143
  type: :development
144
144
  prerelease: false
145
- version_requirements: *12040220
145
+ version_requirements: *9901000
146
146
  - !ruby/object:Gem::Dependency
147
147
  name: rack-test
148
- requirement: &12039660 !ruby/object:Gem::Requirement
148
+ requirement: &9900100 !ruby/object:Gem::Requirement
149
149
  none: false
150
150
  requirements:
151
151
  - - ! '>='
@@ -153,10 +153,10 @@ dependencies:
153
153
  version: '0'
154
154
  type: :development
155
155
  prerelease: false
156
- version_requirements: *12039660
156
+ version_requirements: *9900100
157
157
  - !ruby/object:Gem::Dependency
158
158
  name: simplecov
159
- requirement: &12037700 !ruby/object:Gem::Requirement
159
+ requirement: &9897660 !ruby/object:Gem::Requirement
160
160
  none: false
161
161
  requirements:
162
162
  - - ~>
@@ -164,10 +164,10 @@ dependencies:
164
164
  version: 0.5.4
165
165
  type: :development
166
166
  prerelease: false
167
- version_requirements: *12037700
167
+ version_requirements: *9897660
168
168
  - !ruby/object:Gem::Dependency
169
169
  name: simplecov-rcov
170
- requirement: &12051840 !ruby/object:Gem::Requirement
170
+ requirement: &9911680 !ruby/object:Gem::Requirement
171
171
  none: false
172
172
  requirements:
173
173
  - - ! '>='
@@ -175,10 +175,10 @@ dependencies:
175
175
  version: '0'
176
176
  type: :development
177
177
  prerelease: false
178
- version_requirements: *12051840
178
+ version_requirements: *9911680
179
179
  - !ruby/object:Gem::Dependency
180
180
  name: gem_publisher
181
- requirement: &12050540 !ruby/object:Gem::Requirement
181
+ requirement: &9910020 !ruby/object:Gem::Requirement
182
182
  none: false
183
183
  requirements:
184
184
  - - ~>
@@ -186,10 +186,10 @@ dependencies:
186
186
  version: 1.1.1
187
187
  type: :development
188
188
  prerelease: false
189
- version_requirements: *12050540
189
+ version_requirements: *9910020
190
190
  - !ruby/object:Gem::Dependency
191
191
  name: timecop
192
- requirement: &12048920 !ruby/object:Gem::Requirement
192
+ requirement: &9908540 !ruby/object:Gem::Requirement
193
193
  none: false
194
194
  requirements:
195
195
  - - ~>
@@ -197,7 +197,7 @@ dependencies:
197
197
  version: 0.5.1
198
198
  type: :development
199
199
  prerelease: false
200
- version_requirements: *12048920
200
+ version_requirements: *9908540
201
201
  description: A set of adapters providing easy access to the GDS GOV.UK APIs
202
202
  email:
203
203
  - jystewart@gmail.com
@@ -328,7 +328,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
328
328
  version: '0'
329
329
  segments:
330
330
  - 0
331
- hash: -3837904856260471642
331
+ hash: -3268475085695861388
332
332
  required_rubygems_version: !ruby/object:Gem::Requirement
333
333
  none: false
334
334
  requirements:
@@ -337,7 +337,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
337
337
  version: '0'
338
338
  segments:
339
339
  - 0
340
- hash: -3837904856260471642
340
+ hash: -3268475085695861388
341
341
  requirements: []
342
342
  rubyforge_project:
343
343
  rubygems_version: 1.8.11