gds-api-adapters 37.5.1 → 38.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +0 -11
- data/lib/gds-api-adapters.rb +0 -1
- data/lib/gds_api/asset_manager.rb +1 -0
- data/lib/gds_api/content_store.rb +3 -10
- data/lib/gds_api/email_alert_api.rb +1 -0
- data/lib/gds_api/helpers.rb +1 -6
- data/lib/gds_api/json_client.rb +2 -15
- data/lib/gds_api/list_response.rb +1 -5
- data/lib/gds_api/need_api.rb +4 -0
- data/lib/gds_api/publishing_api.rb +0 -17
- data/lib/gds_api/publishing_api_v2.rb +12 -20
- data/lib/gds_api/response.rb +0 -26
- data/lib/gds_api/rummager.rb +14 -3
- data/lib/gds_api/support_api.rb +1 -0
- data/lib/gds_api/test_helpers/need_api.rb +7 -0
- data/lib/gds_api/test_helpers/publishing_api.rb +0 -27
- data/lib/gds_api/version.rb +1 -1
- data/test/content_store_test.rb +0 -43
- data/test/helpers_test.rb +0 -1
- data/test/json_client_test.rb +0 -135
- data/test/need_api_test.rb +16 -0
- data/test/publishing_api_test.rb +0 -58
- data/test/response_test.rb +0 -63
- data/test/rummager_test.rb +2 -2
- data/test/test_helpers/publishing_api_test.rb +0 -29
- metadata +2 -12
- data/lib/gds_api/config.rb +0 -76
- data/lib/gds_api/external_link_tracker.rb +0 -7
- data/lib/gds_api/needotron.rb +0 -19
- data/lib/gds_api/part_methods.rb +0 -44
- data/lib/gds_api/publisher.rb +0 -51
- data/lib/gds_api/test_helpers/publisher.rb +0 -60
- data/test/external_link_tracker_test.rb +0 -40
- data/test/publisher_api_test.rb +0 -109
data/lib/gds_api/config.rb
DELETED
@@ -1,76 +0,0 @@
|
|
1
|
-
module GdsApi
|
2
|
-
def self.configure
|
3
|
-
yield(config)
|
4
|
-
end
|
5
|
-
|
6
|
-
def self.config
|
7
|
-
@config ||= Config.new
|
8
|
-
end
|
9
|
-
|
10
|
-
class Config
|
11
|
-
# Always raise an `HTTPNotFound` exception when the server returns 404 or an
|
12
|
-
# `HTTPGone` when the server returns 410. This avoids nil-errors in your
|
13
|
-
# code and makes debugging easier.
|
14
|
-
#
|
15
|
-
# Currently defaults to true.
|
16
|
-
#
|
17
|
-
# This configuration will be removed on December 1st, 2016. Please make sure
|
18
|
-
# you upgrade gds-api-adapters to the latest version and avoid configuring
|
19
|
-
# it on your client application.
|
20
|
-
def always_raise_for_not_found
|
21
|
-
return true if @always_raise_for_not_found.nil?
|
22
|
-
|
23
|
-
@always_raise_for_not_found
|
24
|
-
end
|
25
|
-
|
26
|
-
def always_raise_for_not_found=(value)
|
27
|
-
warn <<-doc
|
28
|
-
|
29
|
-
DEPRECATION NOTICE: Please delete any instances of
|
30
|
-
`GdsApi.config.always_raise_for_not_found=` from your codebase to make
|
31
|
-
sure all 404 or 410 responses raise an exception.
|
32
|
-
|
33
|
-
This configuration option will be be removed. Raising exceptions is now
|
34
|
-
the default behaviour and it won't be possible to opt-out from December
|
35
|
-
1st, 2016.
|
36
|
-
|
37
|
-
Called from: #{caller[2]}
|
38
|
-
|
39
|
-
doc
|
40
|
-
|
41
|
-
@always_raise_for_not_found = value
|
42
|
-
end
|
43
|
-
|
44
|
-
# Set to true to make `GdsApi::Response` behave like a simple hash, instead
|
45
|
-
# of an OpenStruct. This will prevent nil-errors.
|
46
|
-
#
|
47
|
-
# Currently defaults to true.
|
48
|
-
#
|
49
|
-
# This configuration will be removed on December 1st, 2016. Please make sure
|
50
|
-
# you upgrade gds-api-adapters to the latest version and avoid configuring
|
51
|
-
# it on your client application.
|
52
|
-
def hash_response_for_requests
|
53
|
-
return true if @hash_response_for_requests.nil?
|
54
|
-
|
55
|
-
@hash_response_for_requests
|
56
|
-
end
|
57
|
-
|
58
|
-
def hash_response_for_requests=(value)
|
59
|
-
warn <<-doc
|
60
|
-
|
61
|
-
DEPRECATION NOTICE: Please delete any instances of
|
62
|
-
`GdsApi.config.hash_response_for_requests=` from your codebase to make
|
63
|
-
sure responses behave like a Hash instead of an OpenStruct.
|
64
|
-
|
65
|
-
This configuration option will be be removed. Returning responses that
|
66
|
-
behave like a Hash is the default behaviour and it won't be possible to
|
67
|
-
opt-out from December 1st, 2016.
|
68
|
-
|
69
|
-
Called from: #{caller[2]}
|
70
|
-
|
71
|
-
doc
|
72
|
-
|
73
|
-
@hash_response_for_requests = value
|
74
|
-
end
|
75
|
-
end
|
76
|
-
end
|
data/lib/gds_api/needotron.rb
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
require_relative 'base'
|
2
|
-
|
3
|
-
class GdsApi::Needotron < GdsApi::Base
|
4
|
-
def need_by_id(id, opts = {})
|
5
|
-
response = get_json("#{base_url}/#{id}.json")
|
6
|
-
return nil if response.nil? or response['need'].nil?
|
7
|
-
|
8
|
-
if opts[:as_hash]
|
9
|
-
response.to_hash
|
10
|
-
else
|
11
|
-
response.to_ostruct.need
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
private
|
16
|
-
def base_url
|
17
|
-
"#{@endpoint}/needs"
|
18
|
-
end
|
19
|
-
end
|
data/lib/gds_api/part_methods.rb
DELETED
@@ -1,44 +0,0 @@
|
|
1
|
-
module GdsApi::PartMethods
|
2
|
-
|
3
|
-
def part_index(slug)
|
4
|
-
parsed_content['parts'].index { |p| p['slug'] == slug }
|
5
|
-
end
|
6
|
-
|
7
|
-
def find_part(slug)
|
8
|
-
return nil unless index = part_index(slug)
|
9
|
-
parsed_content['parts'][index]
|
10
|
-
end
|
11
|
-
|
12
|
-
def has_parts?(part)
|
13
|
-
!! (has_previous_part?(part) || has_next_part?(part))
|
14
|
-
end
|
15
|
-
|
16
|
-
def has_previous_part?(part)
|
17
|
-
index = part_index(part['slug'])
|
18
|
-
!! (index && index > 0)
|
19
|
-
end
|
20
|
-
|
21
|
-
def has_next_part?(part)
|
22
|
-
index = part_index(part['slug'])
|
23
|
-
!! (index && (index + 1) < parsed_content['parts'].length)
|
24
|
-
end
|
25
|
-
|
26
|
-
def part_after(part)
|
27
|
-
part_at(part, 1)
|
28
|
-
end
|
29
|
-
|
30
|
-
def part_before(part)
|
31
|
-
part_at(part, -1)
|
32
|
-
end
|
33
|
-
|
34
|
-
private
|
35
|
-
def part_at(part, relative_offset)
|
36
|
-
current_index = part_index(part['slug'])
|
37
|
-
return nil unless current_index
|
38
|
-
|
39
|
-
other_index = current_index + relative_offset
|
40
|
-
return nil unless (0...parsed_content['parts'].length).cover?(other_index)
|
41
|
-
|
42
|
-
parsed_content['parts'][other_index]
|
43
|
-
end
|
44
|
-
end
|
data/lib/gds_api/publisher.rb
DELETED
@@ -1,51 +0,0 @@
|
|
1
|
-
require_relative 'base'
|
2
|
-
require_relative 'part_methods'
|
3
|
-
|
4
|
-
class GdsApi::Publisher < GdsApi::Base
|
5
|
-
def publication_for_slug(slug, options = {})
|
6
|
-
return nil if slug.nil? or slug == ''
|
7
|
-
|
8
|
-
response = get_json(url_for_slug(slug, options))
|
9
|
-
if response
|
10
|
-
container = response.dup
|
11
|
-
container.extend(GdsApi::PartMethods) if container['parts']
|
12
|
-
convert_updated_date(container)
|
13
|
-
container
|
14
|
-
else
|
15
|
-
nil
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
def council_for_slug(slug, snac_codes)
|
20
|
-
json = post_json(
|
21
|
-
"#{@endpoint}/local_transactions/#{slug}/verify_snac.json",
|
22
|
-
{'snac_codes' => snac_codes}
|
23
|
-
)
|
24
|
-
json['snac'] if json
|
25
|
-
end
|
26
|
-
|
27
|
-
def council_for_snac_code(snac)
|
28
|
-
json = get_json("#{@endpoint}/local_transactions/find_by_snac?snac=#{snac}")
|
29
|
-
json.to_hash if json
|
30
|
-
end
|
31
|
-
|
32
|
-
def council_for_name(name)
|
33
|
-
name = URI.escape(name)
|
34
|
-
json = get_json(
|
35
|
-
"#{@endpoint}/local_transactions/find_by_council_name?name=#{name}"
|
36
|
-
)
|
37
|
-
json.to_hash if json
|
38
|
-
end
|
39
|
-
|
40
|
-
private
|
41
|
-
def convert_updated_date(container)
|
42
|
-
if container['updated_at'] && container['updated_at'].is_a?(String)
|
43
|
-
container.parsed_content['updated_at'] =
|
44
|
-
Time.parse(container['updated_at'])
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
def base_url
|
49
|
-
"#{@endpoint}/publications"
|
50
|
-
end
|
51
|
-
end
|
@@ -1,60 +0,0 @@
|
|
1
|
-
require 'gds_api/test_helpers/json_client_helper'
|
2
|
-
|
3
|
-
module GdsApi
|
4
|
-
module TestHelpers
|
5
|
-
module Publisher
|
6
|
-
# Generally true. If you are initializing the client differently,
|
7
|
-
# you could redefine/override the constant or stub directly.
|
8
|
-
PUBLISHER_ENDPOINT = Plek.current.find("publisher")
|
9
|
-
|
10
|
-
def stub_all_publisher_api_requests
|
11
|
-
stub_request(:any, %r|^#{PUBLISHER_ENDPOINT}/api|)
|
12
|
-
end
|
13
|
-
|
14
|
-
def assert_publisher_received_reindex_request_for(slug)
|
15
|
-
assert_requested(
|
16
|
-
:post,
|
17
|
-
"#{PUBLISHER_ENDPOINT}/api/reindex-topic-editions/#{slug}"
|
18
|
-
)
|
19
|
-
end
|
20
|
-
|
21
|
-
def publication_exists(details, options = {})
|
22
|
-
json = JSON.dump(details)
|
23
|
-
uri = "#{PUBLISHER_ENDPOINT}/publications/#{details['slug']}.json"
|
24
|
-
if options[:edition]
|
25
|
-
uri += "?edition=#{options[:edition]}"
|
26
|
-
end
|
27
|
-
stub_request(:get, uri).to_return(:body => json, :status => 200)
|
28
|
-
return uri
|
29
|
-
end
|
30
|
-
|
31
|
-
def publication_exists_for_snac(snac, details)
|
32
|
-
json = JSON.dump(details)
|
33
|
-
uri = "#{PUBLISHER_ENDPOINT}/publications/#{details['slug']}.json"
|
34
|
-
stub_request(:get, uri).to_return(:body => json, :status => 200)
|
35
|
-
stub_request(:get, uri).with(:query => {:snac => snac.to_s}).to_return(:body => json, :status => 200)
|
36
|
-
return uri
|
37
|
-
end
|
38
|
-
|
39
|
-
def publication_does_not_exist(details)
|
40
|
-
uri = "#{PUBLISHER_ENDPOINT}/publications/#{details['slug']}.json"
|
41
|
-
stub_request(:get, uri).to_return(:body => 'Not Found', :status => 404)
|
42
|
-
return uri
|
43
|
-
end
|
44
|
-
|
45
|
-
def council_exists_for_slug(input_details, output_details)
|
46
|
-
json = JSON.dump(output_details)
|
47
|
-
slug = input_details.delete('slug')
|
48
|
-
uri = "#{PUBLISHER_ENDPOINT}/local_transactions/#{slug}/verify_snac.json"
|
49
|
-
stub_request(:post, uri).with(:body => JSON.dump(input_details),
|
50
|
-
:headers => GdsApi::JsonClient.default_request_headers).
|
51
|
-
to_return(:body => json, :status => 200)
|
52
|
-
end
|
53
|
-
|
54
|
-
def no_council_for_slug(slug)
|
55
|
-
uri = "#{PUBLISHER_ENDPOINT}/local_transactions/#{slug}.json"
|
56
|
-
stub_request(:post, uri).to_return(:body => "", :status => 404)
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
@@ -1,40 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
require 'gds_api/external_link_tracker'
|
3
|
-
|
4
|
-
describe GdsApi::ExternalLinkTracker do
|
5
|
-
|
6
|
-
before do
|
7
|
-
@base_api_url = "http://link-tracker-api.example.com"
|
8
|
-
@api = GdsApi::ExternalLinkTracker.new(@base_api_url)
|
9
|
-
end
|
10
|
-
|
11
|
-
describe "managing links" do
|
12
|
-
it "should allow creating an external link" do
|
13
|
-
req = WebMock.stub_request(:put, "#{@base_api_url}/url?url=http%3A%2F%2Ffoo.example.com%2F").
|
14
|
-
to_return(:status => 201,
|
15
|
-
:headers => {"Content-type" => "application/json"})
|
16
|
-
|
17
|
-
response = @api.add_external_link("http://foo.example.com/")
|
18
|
-
assert_equal 201, response.code
|
19
|
-
|
20
|
-
assert_requested(req)
|
21
|
-
end
|
22
|
-
|
23
|
-
it "should raise an error if creating an external link fails" do
|
24
|
-
req = WebMock.stub_request(:put, "#{@base_api_url}/url?url=invalid").
|
25
|
-
to_return(:status => 400, :headers => {"Content-type" => "application/json"})
|
26
|
-
|
27
|
-
e = nil
|
28
|
-
begin
|
29
|
-
@api.add_external_link("invalid")
|
30
|
-
rescue GdsApi::HTTPErrorResponse => ex
|
31
|
-
e = ex
|
32
|
-
end
|
33
|
-
|
34
|
-
refute_nil e
|
35
|
-
assert_equal 400, e.code
|
36
|
-
|
37
|
-
assert_requested(req)
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
data/test/publisher_api_test.rb
DELETED
@@ -1,109 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
require 'gds_api/publisher'
|
3
|
-
require 'gds_api/json_client'
|
4
|
-
require 'gds_api/test_helpers/publisher'
|
5
|
-
|
6
|
-
describe GdsApi::Publisher do
|
7
|
-
include GdsApi::TestHelpers::Publisher
|
8
|
-
PUBLISHER_ENDPOINT = GdsApi::TestHelpers::Publisher::PUBLISHER_ENDPOINT
|
9
|
-
|
10
|
-
def basic_answer
|
11
|
-
{
|
12
|
-
"audiences" => [""],
|
13
|
-
"slug" => "a-publication",
|
14
|
-
"tags" => "",
|
15
|
-
"updated_at" => "2011-07-28T11:53:03+00:00",
|
16
|
-
"type" => "answer",
|
17
|
-
"body" => "Something",
|
18
|
-
"title" => "A publication"
|
19
|
-
}
|
20
|
-
end
|
21
|
-
|
22
|
-
def publication_with_parts
|
23
|
-
{
|
24
|
-
"audiences" => [""],
|
25
|
-
"slug" => "a-publication",
|
26
|
-
"tags" => "",
|
27
|
-
"updated_at" => "2011-07-28T11:53:03+00:00",
|
28
|
-
"type" => "guide",
|
29
|
-
"body" => "Something",
|
30
|
-
"parts" => [
|
31
|
-
{
|
32
|
-
"body" => "You may be financially protected",
|
33
|
-
"number" => 1,
|
34
|
-
"slug" => "introduction",
|
35
|
-
"title" => "Introduction"
|
36
|
-
},
|
37
|
-
{
|
38
|
-
"body" => "All companies selling packag",
|
39
|
-
"number" => 2,
|
40
|
-
"slug" => "if-you-booked-a-package-holiday",
|
41
|
-
"title" => "If you booked a package holiday"
|
42
|
-
},
|
43
|
-
{
|
44
|
-
"body" => "##Know your rights when you b",
|
45
|
-
"number" => 3,
|
46
|
-
"slug" => "if-you-booked-your-trip-independently",
|
47
|
-
"title" => "If you booked your trip independently"
|
48
|
-
}
|
49
|
-
],
|
50
|
-
"title" => "A publication"
|
51
|
-
}
|
52
|
-
end
|
53
|
-
|
54
|
-
def api
|
55
|
-
@api ||= GdsApi::Publisher.new(PUBLISHER_ENDPOINT)
|
56
|
-
end
|
57
|
-
|
58
|
-
it "should go get resource from publisher app given a slug" do
|
59
|
-
publication_exists(basic_answer)
|
60
|
-
pub = api.publication_for_slug(basic_answer['slug'])
|
61
|
-
|
62
|
-
assert_equal "Something", pub['body']
|
63
|
-
end
|
64
|
-
|
65
|
-
it "should optionally accept an edition id" do
|
66
|
-
slug = "a-publication"
|
67
|
-
publication = %@{"audiences":[""],
|
68
|
-
"slug":"#{slug}",
|
69
|
-
"tags":"",
|
70
|
-
"updated_at":"2011-07-28T11:53:03+00:00",
|
71
|
-
"type":"answer",
|
72
|
-
"body":"Something",
|
73
|
-
"title":"A publication"}@
|
74
|
-
stub_request(:get, "#{PUBLISHER_ENDPOINT}/publications/#{slug}.json?edition=678").to_return(
|
75
|
-
:body => publication,:status=>200)
|
76
|
-
|
77
|
-
pub = api.publication_for_slug(slug,{:edition => 678})
|
78
|
-
end
|
79
|
-
|
80
|
-
it "should construct correct url for a slug" do
|
81
|
-
assert_equal "#{PUBLISHER_ENDPOINT}/publications/slug.json", api.url_for_slug("slug")
|
82
|
-
end
|
83
|
-
|
84
|
-
it "should deserialise parts into whole objects" do
|
85
|
-
publication_exists(publication_with_parts)
|
86
|
-
pub = api.publication_for_slug(publication_with_parts['slug'])
|
87
|
-
assert_equal 3, pub['parts'].size
|
88
|
-
assert_equal "introduction", pub['parts'].first['slug']
|
89
|
-
end
|
90
|
-
|
91
|
-
it "should have part specific methods for a publication with parts" do
|
92
|
-
publication_exists(publication_with_parts)
|
93
|
-
pub = api.publication_for_slug(publication_with_parts['slug'])
|
94
|
-
assert_equal pub.part_index("introduction"),0
|
95
|
-
end
|
96
|
-
|
97
|
-
it "should deserialise updated at as a time" do
|
98
|
-
publication_exists(publication_with_parts)
|
99
|
-
pub = api.publication_for_slug(publication_with_parts['slug'])
|
100
|
-
assert_equal Time, pub['updated_at'].class
|
101
|
-
end
|
102
|
-
|
103
|
-
it "should be able to retrieve local transaction details" do
|
104
|
-
stub_request(:post, "#{PUBLISHER_ENDPOINT}/local_transactions/fake-transaction/verify_snac.json").
|
105
|
-
with(:body => "{\"snac_codes\":[12345]}", :headers => GdsApi::JsonClient.default_request_headers).
|
106
|
-
to_return(:status => 200, :body => '{"snac": "12345"}', :headers => {})
|
107
|
-
assert_equal '12345', api.council_for_slug('fake-transaction', [12345])
|
108
|
-
end
|
109
|
-
end
|