gds-api-adapters 7.4.0 → 7.5.0
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.
- data/lib/gds_api/json_client.rb +21 -13
- data/lib/gds_api/support.rb +4 -4
- data/lib/gds_api/version.rb +1 -1
- data/test/json_client_test.rb +48 -0
- data/test/support_api_test.rb +22 -2
- metadata +4 -4
data/lib/gds_api/json_client.rb
CHANGED
@@ -75,20 +75,20 @@ module GdsApi
|
|
75
75
|
end
|
76
76
|
end
|
77
77
|
|
78
|
-
def get_json!(url, &create_response)
|
79
|
-
do_json_request(:get, url, nil, &create_response)
|
78
|
+
def get_json!(url, additional_headers = {}, &create_response)
|
79
|
+
do_json_request(:get, url, nil, additional_headers, &create_response)
|
80
80
|
end
|
81
81
|
|
82
|
-
def post_json!(url, params)
|
83
|
-
do_json_request(:post, url, params)
|
82
|
+
def post_json!(url, params, additional_headers = {})
|
83
|
+
do_json_request(:post, url, params, additional_headers)
|
84
84
|
end
|
85
85
|
|
86
|
-
def put_json!(url, params)
|
87
|
-
do_json_request(:put, url, params)
|
86
|
+
def put_json!(url, params, additional_headers = {})
|
87
|
+
do_json_request(:put, url, params, additional_headers)
|
88
88
|
end
|
89
89
|
|
90
|
-
def delete_json!(url, params = nil)
|
91
|
-
do_request(:delete, url, params)
|
90
|
+
def delete_json!(url, params = nil, additional_headers = {})
|
91
|
+
do_request(:delete, url, params, additional_headers)
|
92
92
|
end
|
93
93
|
|
94
94
|
def post_multipart(url, params)
|
@@ -112,12 +112,13 @@ module GdsApi
|
|
112
112
|
# method: the symbolic name of the method to use, e.g. :get, :post
|
113
113
|
# url: the request URL
|
114
114
|
# params: the data to send (JSON-serialised) in the request body
|
115
|
+
# additional_headers: headers to set on the request (in addition to the default ones)
|
115
116
|
# create_response: optional block to instantiate a custom response object
|
116
117
|
# from the Net::HTTPResponse
|
117
|
-
def do_json_request(method, url, params = nil, &create_response)
|
118
|
+
def do_json_request(method, url, params = nil, additional_headers = {}, &create_response)
|
118
119
|
|
119
120
|
begin
|
120
|
-
response = do_request_with_cache(method, url, (params.to_json if params))
|
121
|
+
response = do_request_with_cache(method, url, (params.to_json if params), additional_headers)
|
121
122
|
|
122
123
|
rescue RestClient::ResourceNotFound => e
|
123
124
|
raise GdsApi::HTTPNotFound.new(e.http_code)
|
@@ -163,6 +164,12 @@ module GdsApi
|
|
163
164
|
)
|
164
165
|
end
|
165
166
|
|
167
|
+
def with_headers(method_params, headers)
|
168
|
+
method_params.merge(
|
169
|
+
headers: method_params[:headers].merge(headers)
|
170
|
+
)
|
171
|
+
end
|
172
|
+
|
166
173
|
def with_ssl_options(method_params)
|
167
174
|
method_params.merge(
|
168
175
|
# This is the default value anyway, but we should probably be explicit
|
@@ -170,7 +177,7 @@ module GdsApi
|
|
170
177
|
)
|
171
178
|
end
|
172
179
|
|
173
|
-
def do_request_with_cache(method, url, params = nil)
|
180
|
+
def do_request_with_cache(method, url, params = nil, additional_headers = {})
|
174
181
|
# Only read GET requests from the cache: any other request methods should
|
175
182
|
# always be passed through. Note that this means HEAD requests won't get
|
176
183
|
# cached, but that would involve separating the cache by method and URL.
|
@@ -182,7 +189,7 @@ module GdsApi
|
|
182
189
|
return cached_response if cached_response
|
183
190
|
end
|
184
191
|
|
185
|
-
response = do_request(method, url, params)
|
192
|
+
response = do_request(method, url, params, additional_headers)
|
186
193
|
|
187
194
|
if use_cache
|
188
195
|
cache_time = response_cache_time(response)
|
@@ -201,7 +208,7 @@ module GdsApi
|
|
201
208
|
end
|
202
209
|
end
|
203
210
|
|
204
|
-
def do_request(method, url, params = nil)
|
211
|
+
def do_request(method, url, params = nil, additional_headers = {})
|
205
212
|
loggable = {request_uri: url, start_time: Time.now.to_f}
|
206
213
|
start_logging = loggable.merge(action: 'start')
|
207
214
|
logger.debug start_logging.to_json
|
@@ -214,6 +221,7 @@ module GdsApi
|
|
214
221
|
method_params[:payload] = params
|
215
222
|
method_params = with_auth_options(method_params)
|
216
223
|
method_params = with_timeout(method_params)
|
224
|
+
method_params = with_headers(method_params, additional_headers)
|
217
225
|
if URI.parse(url).is_a? URI::HTTPS
|
218
226
|
method_params = with_ssl_options(method_params)
|
219
227
|
end
|
data/lib/gds_api/support.rb
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
require_relative 'base'
|
2
2
|
|
3
3
|
class GdsApi::Support < GdsApi::Base
|
4
|
-
def create_foi_request(request_details)
|
5
|
-
post_json!("#{base_url}/foi_requests", { :foi_request => request_details })
|
4
|
+
def create_foi_request(request_details, options = {})
|
5
|
+
post_json!("#{base_url}/foi_requests", { :foi_request => request_details }, options[:headers] || {})
|
6
6
|
end
|
7
7
|
|
8
|
-
def create_problem_report(request_details)
|
9
|
-
post_json!("#{base_url}/problem_reports", { :problem_report => request_details })
|
8
|
+
def create_problem_report(request_details, options = {})
|
9
|
+
post_json!("#{base_url}/problem_reports", { :problem_report => request_details }, options[:headers] || {})
|
10
10
|
end
|
11
11
|
|
12
12
|
private
|
data/lib/gds_api/version.rb
CHANGED
data/test/json_client_test.rb
CHANGED
@@ -468,6 +468,54 @@ class JsonClientTest < MiniTest::Spec
|
|
468
468
|
assert_equal 2, response.a
|
469
469
|
end
|
470
470
|
|
471
|
+
def test_client_can_set_custom_headers_on_gets
|
472
|
+
stub_request(:get, "http://some.other.endpoint/some.json").to_return(:status => 200)
|
473
|
+
|
474
|
+
response = GdsApi::JsonClient.new.get_json("http://some.other.endpoint/some.json",
|
475
|
+
{ "HEADER-A" => "B", "HEADER-C" => "D" })
|
476
|
+
|
477
|
+
assert_requested(:get, %r{/some.json}) do |request|
|
478
|
+
headers_with_uppercase_names = Hash[request.headers.collect {|key, value| [key.upcase, value] }]
|
479
|
+
headers_with_uppercase_names["HEADER-A"] == "B" && headers_with_uppercase_names["HEADER-C"] == "D"
|
480
|
+
end
|
481
|
+
end
|
482
|
+
|
483
|
+
def test_client_can_set_custom_headers_on_posts
|
484
|
+
stub_request(:post, "http://some.other.endpoint/some.json").to_return(:status => 200)
|
485
|
+
|
486
|
+
response = GdsApi::JsonClient.new.post_json("http://some.other.endpoint/some.json", {},
|
487
|
+
{ "HEADER-A" => "B", "HEADER-C" => "D" })
|
488
|
+
|
489
|
+
assert_requested(:post, %r{/some.json}) do |request|
|
490
|
+
headers_with_uppercase_names = Hash[request.headers.collect {|key, value| [key.upcase, value] }]
|
491
|
+
headers_with_uppercase_names["HEADER-A"] == "B" && headers_with_uppercase_names["HEADER-C"] == "D"
|
492
|
+
end
|
493
|
+
end
|
494
|
+
|
495
|
+
def test_client_can_set_custom_headers_on_puts
|
496
|
+
stub_request(:put, "http://some.other.endpoint/some.json").to_return(:status => 200)
|
497
|
+
|
498
|
+
response = GdsApi::JsonClient.new.put_json("http://some.other.endpoint/some.json", {},
|
499
|
+
{ "HEADER-A" => "B", "HEADER-C" => "D" })
|
500
|
+
|
501
|
+
assert_requested(:put, %r{/some.json}) do |request|
|
502
|
+
headers_with_uppercase_names = Hash[request.headers.collect {|key, value| [key.upcase, value] }]
|
503
|
+
headers_with_uppercase_names["HEADER-A"] == "B" && headers_with_uppercase_names["HEADER-C"] == "D"
|
504
|
+
end
|
505
|
+
end
|
506
|
+
|
507
|
+
def test_client_can_set_custom_headers_on_deletes
|
508
|
+
stub_request(:delete, "http://some.other.endpoint/some.json").to_return(:status => 200)
|
509
|
+
|
510
|
+
response = GdsApi::JsonClient.new.delete_json("http://some.other.endpoint/some.json", {},
|
511
|
+
{ "HEADER-A" => "B", "HEADER-C" => "D" })
|
512
|
+
|
513
|
+
assert_requested(:delete, %r{/some.json}) do |request|
|
514
|
+
headers_with_uppercase_names = Hash[request.headers.collect {|key, value| [key.upcase, value] }]
|
515
|
+
headers_with_uppercase_names["HEADER-A"] == "B" && headers_with_uppercase_names["HEADER-C"] == "D"
|
516
|
+
end
|
517
|
+
end
|
518
|
+
|
471
519
|
def test_client_can_decompress_gzip_responses
|
472
520
|
url = "http://some.endpoint/some.json"
|
473
521
|
# {"test": "hello"}
|
data/test/support_api_test.rb
CHANGED
@@ -22,7 +22,17 @@ describe GdsApi::Support do
|
|
22
22
|
assert_requested(stub_post)
|
23
23
|
end
|
24
24
|
|
25
|
-
it "
|
25
|
+
it "can add a custom header onto the FOI request to the support app" do
|
26
|
+
stub_request(:post, "#{@base_api_url}/foi_requests")
|
27
|
+
|
28
|
+
@api.create_foi_request({}, headers: { "X-Varnish" => "12345"})
|
29
|
+
|
30
|
+
assert_requested(:post, %r{/foi_requests}) do |request|
|
31
|
+
request.headers["X-Varnish"] == "12345"
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
it "throws an exception when the support app isn't available" do
|
26
36
|
support_isnt_available
|
27
37
|
|
28
38
|
assert_raises(GdsApi::HTTPErrorResponse) { @api.create_foi_request({}) }
|
@@ -40,7 +50,17 @@ describe GdsApi::Support do
|
|
40
50
|
assert_requested(stub_post)
|
41
51
|
end
|
42
52
|
|
43
|
-
it "
|
53
|
+
it "can add a custom header onto the problem_report request to the support app" do
|
54
|
+
stub_request(:post, "#{@base_api_url}/problem_reports")
|
55
|
+
|
56
|
+
@api.create_problem_report({}, headers: { "X-Varnish" => "12345"})
|
57
|
+
|
58
|
+
assert_requested(:post, %r{/problem_reports}) do |request|
|
59
|
+
request.headers["X-Varnish"] == "12345"
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
it "throws an exception when the support app isn't available" do
|
44
64
|
support_isnt_available
|
45
65
|
|
46
66
|
assert_raises(GdsApi::HTTPErrorResponse) { @api.create_problem_report({}) }
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: gds-api-adapters
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 7.
|
5
|
+
version: 7.5.0
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- James Stewart
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2013-
|
13
|
+
date: 2013-09-05 00:00:00 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: plek
|
@@ -260,7 +260,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
260
260
|
requirements:
|
261
261
|
- - ">="
|
262
262
|
- !ruby/object:Gem::Version
|
263
|
-
hash:
|
263
|
+
hash: -3019861468380170636
|
264
264
|
segments:
|
265
265
|
- 0
|
266
266
|
version: "0"
|
@@ -269,7 +269,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
269
269
|
requirements:
|
270
270
|
- - ">="
|
271
271
|
- !ruby/object:Gem::Version
|
272
|
-
hash:
|
272
|
+
hash: -3019861468380170636
|
273
273
|
segments:
|
274
274
|
- 0
|
275
275
|
version: "0"
|