gds-api-adapters 5.5.0 → 6.0.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/base.rb +9 -1
- data/lib/gds_api/content_api.rb +5 -6
- data/lib/gds_api/helpers.rb +5 -0
- data/lib/gds_api/json_client.rb +48 -17
- data/lib/gds_api/{content_api/list_response.rb → list_response.rb} +5 -5
- data/lib/gds_api/null_cache.rb +13 -0
- data/lib/gds_api/response.rb +54 -13
- data/lib/gds_api/rummager.rb +12 -33
- data/lib/gds_api/test_helpers/common_responses.rb +36 -0
- data/lib/gds_api/test_helpers/content_api.rb +6 -33
- data/lib/gds_api/test_helpers/json_client_helper.rb +2 -14
- data/lib/gds_api/test_helpers/worldwide.rb +116 -0
- data/lib/gds_api/version.rb +1 -1
- data/lib/gds_api/worldwide.rb +21 -0
- data/test/fixtures/world_organisations_australia.json +490 -0
- data/test/gds_api_base_test.rb +5 -0
- data/test/json_client_test.rb +66 -30
- data/test/list_response_test.rb +179 -0
- data/test/response_test.rb +192 -0
- data/test/rummager_test.rb +8 -32
- data/test/test_helper.rb +2 -0
- data/test/worldwide_api_test.rb +71 -0
- metadata +17 -8
- data/lib/gds_api/content_api/response.rb +0 -56
- data/test/content_api_response_test.rb +0 -97
@@ -1,56 +0,0 @@
|
|
1
|
-
module GdsApi
|
2
|
-
class ContentApi < GdsApi::Base
|
3
|
-
class Response < GdsApi::Response
|
4
|
-
# Responses from the content API can be configured to use relative URLs
|
5
|
-
# for `web_url` properties. This is useful on non-canonical frontends,
|
6
|
-
# such as those in staging environments.
|
7
|
-
#
|
8
|
-
# Example:
|
9
|
-
#
|
10
|
-
# r = Response.new(response, web_urls_relative_to: "https://www.gov.uk")
|
11
|
-
# r.results[0].web_url
|
12
|
-
# => "/bank-holidays"
|
13
|
-
|
14
|
-
WEB_URL_KEYS = ["web_url"]
|
15
|
-
|
16
|
-
def initialize(http_response, options = {})
|
17
|
-
if options[:web_urls_relative_to]
|
18
|
-
@web_urls_relative_to = URI.parse(options[:web_urls_relative_to])
|
19
|
-
else
|
20
|
-
@web_urls_relative_to = nil
|
21
|
-
end
|
22
|
-
|
23
|
-
super(http_response)
|
24
|
-
end
|
25
|
-
|
26
|
-
def to_hash
|
27
|
-
@parsed ||= transform_parsed(JSON.parse(@http_response.body))
|
28
|
-
end
|
29
|
-
|
30
|
-
private
|
31
|
-
def transform_parsed(value)
|
32
|
-
case value
|
33
|
-
when Hash
|
34
|
-
Hash[value.map { |k, v|
|
35
|
-
# NOTE: Don't bother transforming if the value is nil
|
36
|
-
if @web_urls_relative_to && WEB_URL_KEYS.include?(k) && v
|
37
|
-
# Use relative URLs to route when the web_url value is on the
|
38
|
-
# same domain as the site root. Note that we can't just use the
|
39
|
-
# `route_to` method, as this would give us technically correct
|
40
|
-
# but potentially confusing `//host/path` URLs for URLs with the
|
41
|
-
# same scheme but different hosts.
|
42
|
-
relative_url = @web_urls_relative_to.route_to(v)
|
43
|
-
[k, relative_url.host ? v : relative_url.to_s]
|
44
|
-
else
|
45
|
-
[k, transform_parsed(v)]
|
46
|
-
end
|
47
|
-
}]
|
48
|
-
when Array
|
49
|
-
value.map { |v| transform_parsed(v) }
|
50
|
-
else
|
51
|
-
value
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
@@ -1,97 +0,0 @@
|
|
1
|
-
require "test_helper"
|
2
|
-
require "gds_api/content_api"
|
3
|
-
|
4
|
-
describe "GdsApi::ContentApi::Response" do
|
5
|
-
|
6
|
-
DummyNetResponse = Struct.new(:body)
|
7
|
-
|
8
|
-
def response_for(net_response)
|
9
|
-
root = "https://www.gov.uk"
|
10
|
-
GdsApi::ContentApi::Response.new(net_response, web_urls_relative_to: root)
|
11
|
-
end
|
12
|
-
|
13
|
-
it "should map web URLs" do
|
14
|
-
body = {
|
15
|
-
"web_url" => "https://www.gov.uk/test"
|
16
|
-
}.to_json
|
17
|
-
assert_equal "/test", response_for(DummyNetResponse.new(body)).web_url
|
18
|
-
end
|
19
|
-
|
20
|
-
it "should leave other properties alone" do
|
21
|
-
body = {
|
22
|
-
"title" => "Title",
|
23
|
-
"description" => "Description"
|
24
|
-
}.to_json
|
25
|
-
response = response_for(DummyNetResponse.new(body))
|
26
|
-
assert_equal "Title", response.title
|
27
|
-
assert_equal "Description", response.description
|
28
|
-
end
|
29
|
-
|
30
|
-
it "should traverse into arrays" do
|
31
|
-
body = {
|
32
|
-
"other_urls" => [
|
33
|
-
{ "title" => "Pies", "web_url" => "https://www.gov.uk/pies" },
|
34
|
-
{ "title" => "Cheese", "web_url" => "https://www.gov.uk/cheese" }
|
35
|
-
]
|
36
|
-
}.to_json
|
37
|
-
|
38
|
-
response = response_for(DummyNetResponse.new(body))
|
39
|
-
assert_equal "/pies", response.other_urls[0].web_url
|
40
|
-
assert_equal "/cheese", response.other_urls[1].web_url
|
41
|
-
end
|
42
|
-
|
43
|
-
it "should traverse into hashes" do
|
44
|
-
body = {
|
45
|
-
"details" => {
|
46
|
-
"chirality" => "widdershins",
|
47
|
-
"web_url" => "https://www.gov.uk/left"
|
48
|
-
}
|
49
|
-
}.to_json
|
50
|
-
|
51
|
-
response = response_for(DummyNetResponse.new(body))
|
52
|
-
assert_equal "/left", response.details.web_url
|
53
|
-
end
|
54
|
-
|
55
|
-
it "should handle nil values" do
|
56
|
-
body = {"web_url" => nil}.to_json
|
57
|
-
|
58
|
-
response = response_for(DummyNetResponse.new(body))
|
59
|
-
assert_nil response.web_url
|
60
|
-
end
|
61
|
-
|
62
|
-
it "should handle query parameters" do
|
63
|
-
body = {
|
64
|
-
"web_url" => "https://www.gov.uk/thing?does=stuff"
|
65
|
-
}.to_json
|
66
|
-
|
67
|
-
response = response_for(DummyNetResponse.new(body))
|
68
|
-
assert_equal "/thing?does=stuff", response.web_url
|
69
|
-
end
|
70
|
-
|
71
|
-
it "should handle fragments" do
|
72
|
-
body = {
|
73
|
-
"web_url" => "https://www.gov.uk/thing#part-2"
|
74
|
-
}.to_json
|
75
|
-
|
76
|
-
response = response_for(DummyNetResponse.new(body))
|
77
|
-
assert_equal "/thing#part-2", response.web_url
|
78
|
-
end
|
79
|
-
|
80
|
-
it "should keep URLs from other domains absolute" do
|
81
|
-
body = {
|
82
|
-
"web_url" => "https://www.example.com/example"
|
83
|
-
}.to_json
|
84
|
-
|
85
|
-
response = response_for(DummyNetResponse.new(body))
|
86
|
-
assert_equal "https://www.example.com/example", response.web_url
|
87
|
-
end
|
88
|
-
|
89
|
-
it "should keep URLs with other schemes absolute" do
|
90
|
-
body = {
|
91
|
-
"web_url" => "http://www.example.com/example"
|
92
|
-
}.to_json
|
93
|
-
|
94
|
-
response = response_for(DummyNetResponse.new(body))
|
95
|
-
assert_equal "http://www.example.com/example", response.web_url
|
96
|
-
end
|
97
|
-
end
|