gds-api-adapters 4.1.3 → 4.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/gds_api/content_api.rb +16 -7
- data/lib/gds_api/content_api/list_response.rb +90 -0
- data/lib/gds_api/json_client.rb +24 -19
- data/lib/gds_api/test_helpers/content_api.rb +1 -1
- data/lib/gds_api/test_helpers/content_api/artefact_stub.rb +2 -2
- data/lib/gds_api/version.rb +1 -1
- data/test/content_api_test.rb +98 -0
- metadata +65 -54
- data/lib/gds_api/typhoeus_client.rb +0 -3
data/lib/gds_api/content_api.rb
CHANGED
@@ -1,19 +1,20 @@
|
|
1
1
|
require_relative 'base'
|
2
2
|
require_relative 'exceptions'
|
3
|
+
require 'gds_api/content_api/list_response'
|
3
4
|
|
4
5
|
class GdsApi::ContentApi < GdsApi::Base
|
5
6
|
include GdsApi::ExceptionHandling
|
6
7
|
|
7
8
|
def sections
|
8
|
-
|
9
|
+
get_list!("#{base_url}/tags.json?type=section")
|
9
10
|
end
|
10
11
|
|
11
12
|
def root_sections
|
12
|
-
|
13
|
+
get_list!("#{base_url}/tags.json?type=section&root_sections=true")
|
13
14
|
end
|
14
15
|
|
15
16
|
def sub_sections(parent_tag)
|
16
|
-
|
17
|
+
get_list!("#{base_url}/tags.json?type=section&parent_id=#{CGI.escape(parent_tag)}")
|
17
18
|
end
|
18
19
|
|
19
20
|
def tag(tag)
|
@@ -21,22 +22,22 @@ class GdsApi::ContentApi < GdsApi::Base
|
|
21
22
|
end
|
22
23
|
|
23
24
|
def with_tag(tag)
|
24
|
-
|
25
|
+
get_list!("#{base_url}/with_tag.json?tag=#{CGI.escape(tag)}&include_children=1")
|
25
26
|
end
|
26
27
|
|
27
28
|
def curated_list(tag)
|
28
|
-
|
29
|
+
get_list("#{base_url}/with_tag.json?tag=#{CGI.escape(tag)}&sort=curated")
|
29
30
|
end
|
30
31
|
|
31
32
|
def sorted_by(tag, sort_by)
|
32
|
-
|
33
|
+
get_list!("#{base_url}/with_tag.json?tag=#{CGI.escape(tag)}&sort=#{sort_by}")
|
33
34
|
end
|
34
35
|
|
35
36
|
def artefact(slug, params={})
|
36
37
|
edition = params[:edition]
|
37
38
|
snac = params[:snac]
|
38
39
|
|
39
|
-
url = "#{base_url}/#{slug}.json"
|
40
|
+
url = "#{base_url}/#{CGI.escape(slug)}.json"
|
40
41
|
query = params.map { |k,v| "#{k}=#{v}" }
|
41
42
|
if query.any?
|
42
43
|
url += "?#{query.join("&")}"
|
@@ -84,6 +85,14 @@ class GdsApi::ContentApi < GdsApi::Base
|
|
84
85
|
get_batch(last_batch_url, response)
|
85
86
|
end
|
86
87
|
|
88
|
+
def get_list!(url)
|
89
|
+
get_json!(url) { |r| ListResponse.new(r, self) }
|
90
|
+
end
|
91
|
+
|
92
|
+
def get_list(url)
|
93
|
+
get_json(url) { |r| ListResponse.new(r, self) }
|
94
|
+
end
|
95
|
+
|
87
96
|
private
|
88
97
|
def base_url
|
89
98
|
endpoint
|
@@ -0,0 +1,90 @@
|
|
1
|
+
require "json"
|
2
|
+
require "gds_api/response"
|
3
|
+
require "link_header"
|
4
|
+
|
5
|
+
class GdsApi::ContentApi < GdsApi::Base
|
6
|
+
|
7
|
+
# Response class for lists of multiple items from the content API.
|
8
|
+
#
|
9
|
+
# These responses are in a common format, with the list of results contained
|
10
|
+
# under the `results` key. The response may also have previous and subsequent
|
11
|
+
# pages, indicated by entries in the response's `Link` header.
|
12
|
+
class ListResponse < GdsApi::Response
|
13
|
+
|
14
|
+
# The ListResponse is instantiated with a reference back to the API client,
|
15
|
+
# so it can make requests for the subsequent pages
|
16
|
+
def initialize(response, api_client)
|
17
|
+
super(response)
|
18
|
+
@api_client = api_client
|
19
|
+
end
|
20
|
+
|
21
|
+
# Pass calls to `self.each` to the `results` sub-object, so we can iterate
|
22
|
+
# over the response directly
|
23
|
+
def_delegator :results, :each
|
24
|
+
|
25
|
+
def has_next_page?
|
26
|
+
! page_link("next").nil?
|
27
|
+
end
|
28
|
+
|
29
|
+
def next_page
|
30
|
+
# This shouldn't be a performance problem, since the cache will generally
|
31
|
+
# avoid us making multiple requests for the same page, but we shouldn't
|
32
|
+
# allow the data to change once it's already been loaded, so long as we
|
33
|
+
# retain a reference to any one page in the sequence
|
34
|
+
@next_page ||= if has_next_page?
|
35
|
+
@api_client.get_list! page_link("next").href
|
36
|
+
else
|
37
|
+
nil
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def has_previous_page?
|
42
|
+
! page_link("previous").nil?
|
43
|
+
end
|
44
|
+
|
45
|
+
def previous_page
|
46
|
+
# See the note in `next_page` for why this is memoised
|
47
|
+
@previous_page ||= if has_previous_page?
|
48
|
+
@api_client.get_list! page_link("previous").href
|
49
|
+
else
|
50
|
+
nil
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
# Transparently get all results across all pages. Compare this with #each
|
55
|
+
# or #results which only iterate over the current page.
|
56
|
+
#
|
57
|
+
# Example:
|
58
|
+
#
|
59
|
+
# list_response.with_subsequent_pages.each do |result|
|
60
|
+
# ...
|
61
|
+
# end
|
62
|
+
#
|
63
|
+
# or:
|
64
|
+
#
|
65
|
+
# list_response.with_subsequent_pages.count
|
66
|
+
#
|
67
|
+
# Pages of results are fetched on demand. When iterating, that means
|
68
|
+
# fetching pages as results from the current page are exhausted. If you
|
69
|
+
# invoke a method such as #count, this method will fetch all pages at that
|
70
|
+
# point. Note that the responses are stored so subsequent pages will not be
|
71
|
+
# loaded multiple times.
|
72
|
+
def with_subsequent_pages
|
73
|
+
Enumerator.new { |yielder|
|
74
|
+
self.each do |i| yielder << i end
|
75
|
+
if has_next_page?
|
76
|
+
next_page.with_subsequent_pages.each do |i| yielder << i end
|
77
|
+
end
|
78
|
+
}
|
79
|
+
end
|
80
|
+
|
81
|
+
private
|
82
|
+
def link_header
|
83
|
+
@link_header ||= LinkHeader.parse @net_http_response["Link"]
|
84
|
+
end
|
85
|
+
|
86
|
+
def page_link(rel)
|
87
|
+
link_header.find_link(["rel", rel])
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
data/lib/gds_api/json_client.rb
CHANGED
@@ -40,32 +40,28 @@ module GdsApi
|
|
40
40
|
do_raw_request(Net::HTTP::Get, url)
|
41
41
|
end
|
42
42
|
|
43
|
-
|
44
|
-
|
45
|
-
|
43
|
+
# Define "safe" methods for each supported HTTP method
|
44
|
+
#
|
45
|
+
# Each "bang method" tries to make a request, but raises an exception if
|
46
|
+
# the response is not successful. These methods discard those exceptions
|
47
|
+
# and return nil.
|
48
|
+
[:get, :post, :put, :delete].each do |http_method|
|
49
|
+
method_name = "#{http_method}_json"
|
50
|
+
define_method method_name do |url, *args|
|
51
|
+
ignoring GdsApi::HTTPNotFound do
|
52
|
+
send (method_name + "!"), url, *args
|
53
|
+
end
|
46
54
|
end
|
47
55
|
end
|
48
56
|
|
49
|
-
def get_json!(url)
|
50
|
-
@cache[url] ||= do_json_request(Net::HTTP::Get, url)
|
51
|
-
end
|
52
|
-
|
53
|
-
def post_json(url, params)
|
54
|
-
ignoring GdsApi::HTTPNotFound do
|
55
|
-
post_json! url, params
|
56
|
-
end
|
57
|
+
def get_json!(url, &create_response)
|
58
|
+
@cache[url] ||= do_json_request(Net::HTTP::Get, url, nil, &create_response)
|
57
59
|
end
|
58
60
|
|
59
61
|
def post_json!(url, params)
|
60
62
|
do_json_request(Net::HTTP::Post, url, params)
|
61
63
|
end
|
62
64
|
|
63
|
-
def put_json(url, params)
|
64
|
-
ignoring GdsApi::HTTPNotFound do
|
65
|
-
put_json! url, params
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
65
|
def put_json!(url, params)
|
70
66
|
do_json_request(Net::HTTP::Put, url, params)
|
71
67
|
end
|
@@ -80,12 +76,21 @@ module GdsApi
|
|
80
76
|
response.body
|
81
77
|
end
|
82
78
|
|
83
|
-
|
79
|
+
# method_class: the Net::HTTP class to use, e.g. Net::HTTP::Get
|
80
|
+
# url: the request URL
|
81
|
+
# params: the data to send (JSON-serialised) in the request body
|
82
|
+
# create_response: optional block to instantiate a custom response object
|
83
|
+
# from the Net::HTTPResponse
|
84
|
+
def do_json_request(method_class, url, params = nil, &create_response)
|
85
|
+
|
84
86
|
response, loggable = do_request(method_class, url, params)
|
85
87
|
|
88
|
+
# If no custom response is given, just instantiate Response
|
89
|
+
create_response ||= Proc.new { |r| Response.new(r) }
|
90
|
+
|
86
91
|
if response.is_a?(Net::HTTPSuccess)
|
87
92
|
logger.info loggable.merge(status: 'success', end_time: Time.now.to_f).to_json
|
88
|
-
|
93
|
+
create_response.call(response)
|
89
94
|
elsif response.is_a?(Net::HTTPNotFound)
|
90
95
|
raise GdsApi::HTTPNotFound.new(response.code.to_i)
|
91
96
|
else
|
@@ -135,7 +135,7 @@ module GdsApi
|
|
135
135
|
singular_response_base.merge(
|
136
136
|
"title" => titleize_slug(slug),
|
137
137
|
"format" => "guide",
|
138
|
-
"id" => "#{CONTENT_API_ENDPOINT}/#{slug}.json",
|
138
|
+
"id" => "#{CONTENT_API_ENDPOINT}/#{CGI.escape(slug)}.json",
|
139
139
|
"web_url" => "http://frontend.test.gov.uk/#{slug}",
|
140
140
|
"details" => {
|
141
141
|
"need_id" => "1234",
|
@@ -41,7 +41,7 @@ module GdsApi
|
|
41
41
|
|
42
42
|
private
|
43
43
|
def url_without_query
|
44
|
-
"#{CONTENT_API_ENDPOINT}/#{slug}.json"
|
44
|
+
"#{CONTENT_API_ENDPOINT}/#{CGI.escape(slug)}.json"
|
45
45
|
end
|
46
46
|
|
47
47
|
# Ensure that all keys and values are strings
|
@@ -54,4 +54,4 @@ module GdsApi
|
|
54
54
|
end
|
55
55
|
end
|
56
56
|
end
|
57
|
-
end
|
57
|
+
end
|
data/lib/gds_api/version.rb
CHANGED
data/test/content_api_test.rb
CHANGED
@@ -14,8 +14,94 @@ describe GdsApi::ContentApi do
|
|
14
14
|
it "should show a list of sections" do
|
15
15
|
content_api_has_root_sections(["crime"])
|
16
16
|
response = @api.sections
|
17
|
+
|
18
|
+
# Old-style dictionary access
|
17
19
|
first_section = response["results"][0]
|
18
20
|
assert_equal "#{@base_api_url}/tags/crime.json", first_section["id"]
|
21
|
+
|
22
|
+
# Also check attribute access
|
23
|
+
first_section = response.first
|
24
|
+
assert_equal "#{@base_api_url}/tags/crime.json", first_section.id
|
25
|
+
end
|
26
|
+
|
27
|
+
def section_page_url(page_parameter)
|
28
|
+
if page_parameter
|
29
|
+
"#{GdsApi::TestHelpers::ContentApi::CONTENT_API_ENDPOINT}/tags.json?type=section&page=#{page_parameter}"
|
30
|
+
else
|
31
|
+
"#{GdsApi::TestHelpers::ContentApi::CONTENT_API_ENDPOINT}/tags.json?type=section"
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def stub_section_page(page_parameter, options)
|
36
|
+
total_pages = options.fetch :of
|
37
|
+
|
38
|
+
url = section_page_url(page_parameter)
|
39
|
+
|
40
|
+
page_number = page_parameter || 1
|
41
|
+
# e.g. page 2 -> 11..20
|
42
|
+
range_start = (page_number - 1) * 10 + 1
|
43
|
+
range_end = page_number * 10
|
44
|
+
tags = (range_start..range_end).map { |number|
|
45
|
+
tag_for_slug("section-#{number}", "section")
|
46
|
+
}
|
47
|
+
body = plural_response_base.merge(
|
48
|
+
"results" => tags
|
49
|
+
)
|
50
|
+
|
51
|
+
links = []
|
52
|
+
if page_number > 1
|
53
|
+
links << "<#{section_page_url(page_number - 1)}>; rel=\"previous\""
|
54
|
+
end
|
55
|
+
if page_number < total_pages
|
56
|
+
links << "<#{section_page_url(page_number + 1)}>; rel=\"next\""
|
57
|
+
end
|
58
|
+
|
59
|
+
stub_request(:get, url).to_return(
|
60
|
+
status: 200,
|
61
|
+
body: body.to_json,
|
62
|
+
headers: {"Link" => links.join(",")}
|
63
|
+
)
|
64
|
+
end
|
65
|
+
|
66
|
+
it "should allow iteration across pages" do
|
67
|
+
[nil, 2].each do |page_parameter|
|
68
|
+
stub_section_page(page_parameter, of: 2)
|
69
|
+
end
|
70
|
+
|
71
|
+
sections = @api.sections
|
72
|
+
assert_equal 20, sections.with_subsequent_pages.count
|
73
|
+
assert_equal "Section 20", sections.with_subsequent_pages.to_a.last.title
|
74
|
+
end
|
75
|
+
|
76
|
+
it "should iterate across three or more pages" do
|
77
|
+
[nil, 2, 3].each do |page_parameter|
|
78
|
+
stub_section_page(page_parameter, of: 3)
|
79
|
+
end
|
80
|
+
|
81
|
+
sections = @api.sections
|
82
|
+
assert_equal 30, sections.with_subsequent_pages.count
|
83
|
+
assert_equal "Section 30", sections.with_subsequent_pages.to_a.last.title
|
84
|
+
end
|
85
|
+
|
86
|
+
it "should not load a page multiple times" do
|
87
|
+
[nil, 2].each do |page_parameter|
|
88
|
+
stub_section_page(page_parameter, of: 2)
|
89
|
+
end
|
90
|
+
|
91
|
+
sections = @api.sections
|
92
|
+
|
93
|
+
3.times do
|
94
|
+
# Loop through all the items, just to make sure we load all the pages
|
95
|
+
sections.with_subsequent_pages.each do end
|
96
|
+
end
|
97
|
+
|
98
|
+
assert_requested :get, section_page_url(2), times: 1
|
99
|
+
end
|
100
|
+
|
101
|
+
it "should display a single page of sections" do
|
102
|
+
stub_section_page(nil, of: 1)
|
103
|
+
sections = @api.sections
|
104
|
+
assert_equal 10, sections.with_subsequent_pages.count
|
19
105
|
end
|
20
106
|
end
|
21
107
|
|
@@ -39,6 +125,13 @@ describe GdsApi::ContentApi do
|
|
39
125
|
@api.artefact("devolution-uk", edition: 3)
|
40
126
|
end
|
41
127
|
end
|
128
|
+
|
129
|
+
it "should be able to fetch artefacts with a '/' in the slug" do
|
130
|
+
content_api_has_an_artefact("travel-advice/aruba")
|
131
|
+
response = @api.artefact("travel-advice/aruba")
|
132
|
+
assert_requested(:get, "#{@base_api_url}/travel-advice%2Faruba.json")
|
133
|
+
assert_equal "#{@base_api_url}/travel-advice%2Faruba.json", response["id"]
|
134
|
+
end
|
42
135
|
end
|
43
136
|
|
44
137
|
describe "tags" do
|
@@ -50,8 +143,13 @@ describe GdsApi::ContentApi do
|
|
50
143
|
}.to_json
|
51
144
|
stub_request(:get, api_url).to_return(:status => 200, :body => json)
|
52
145
|
response = @api.with_tag("crime-and-justice")
|
146
|
+
|
147
|
+
# Old dictionary-style access
|
53
148
|
subsection = response["results"][0]
|
54
149
|
assert_equal "Complain about a claims company", subsection["title"]
|
150
|
+
|
151
|
+
# Attribute access
|
152
|
+
assert_equal "Complain about a claims company", response.first.title
|
55
153
|
end
|
56
154
|
|
57
155
|
it "should return tag tree for a specific tag" do
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: gds-api-adapters
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 4.
|
5
|
+
version: 4.2.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:
|
13
|
+
date: 2013-01-16 00:00:00 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: plek
|
@@ -35,8 +35,19 @@ dependencies:
|
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: *id002
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
|
-
name:
|
38
|
+
name: link_header
|
39
39
|
requirement: &id003 !ruby/object:Gem::Requirement
|
40
|
+
none: false
|
41
|
+
requirements:
|
42
|
+
- - ">="
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: "0"
|
45
|
+
type: :runtime
|
46
|
+
prerelease: false
|
47
|
+
version_requirements: *id003
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
|
+
name: lrucache
|
50
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
40
51
|
none: false
|
41
52
|
requirements:
|
42
53
|
- - ~>
|
@@ -44,10 +55,10 @@ dependencies:
|
|
44
55
|
version: 0.1.1
|
45
56
|
type: :runtime
|
46
57
|
prerelease: false
|
47
|
-
version_requirements: *
|
58
|
+
version_requirements: *id004
|
48
59
|
- !ruby/object:Gem::Dependency
|
49
60
|
name: rdoc
|
50
|
-
requirement: &
|
61
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
51
62
|
none: false
|
52
63
|
requirements:
|
53
64
|
- - "="
|
@@ -55,10 +66,10 @@ dependencies:
|
|
55
66
|
version: "3.12"
|
56
67
|
type: :development
|
57
68
|
prerelease: false
|
58
|
-
version_requirements: *
|
69
|
+
version_requirements: *id005
|
59
70
|
- !ruby/object:Gem::Dependency
|
60
71
|
name: rake
|
61
|
-
requirement: &
|
72
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
62
73
|
none: false
|
63
74
|
requirements:
|
64
75
|
- - ~>
|
@@ -66,10 +77,10 @@ dependencies:
|
|
66
77
|
version: 0.9.2.2
|
67
78
|
type: :development
|
68
79
|
prerelease: false
|
69
|
-
version_requirements: *
|
80
|
+
version_requirements: *id006
|
70
81
|
- !ruby/object:Gem::Dependency
|
71
82
|
name: webmock
|
72
|
-
requirement: &
|
83
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
73
84
|
none: false
|
74
85
|
requirements:
|
75
86
|
- - ~>
|
@@ -77,10 +88,10 @@ dependencies:
|
|
77
88
|
version: "1.8"
|
78
89
|
type: :development
|
79
90
|
prerelease: false
|
80
|
-
version_requirements: *
|
91
|
+
version_requirements: *id007
|
81
92
|
- !ruby/object:Gem::Dependency
|
82
93
|
name: mocha
|
83
|
-
requirement: &
|
94
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
84
95
|
none: false
|
85
96
|
requirements:
|
86
97
|
- - ~>
|
@@ -88,10 +99,10 @@ dependencies:
|
|
88
99
|
version: 0.12.4
|
89
100
|
type: :development
|
90
101
|
prerelease: false
|
91
|
-
version_requirements: *
|
102
|
+
version_requirements: *id008
|
92
103
|
- !ruby/object:Gem::Dependency
|
93
104
|
name: minitest
|
94
|
-
requirement: &
|
105
|
+
requirement: &id009 !ruby/object:Gem::Requirement
|
95
106
|
none: false
|
96
107
|
requirements:
|
97
108
|
- - ~>
|
@@ -99,10 +110,10 @@ dependencies:
|
|
99
110
|
version: 3.4.0
|
100
111
|
type: :development
|
101
112
|
prerelease: false
|
102
|
-
version_requirements: *
|
113
|
+
version_requirements: *id009
|
103
114
|
- !ruby/object:Gem::Dependency
|
104
115
|
name: rack
|
105
|
-
requirement: &
|
116
|
+
requirement: &id010 !ruby/object:Gem::Requirement
|
106
117
|
none: false
|
107
118
|
requirements:
|
108
119
|
- - ">="
|
@@ -110,10 +121,10 @@ dependencies:
|
|
110
121
|
version: "0"
|
111
122
|
type: :development
|
112
123
|
prerelease: false
|
113
|
-
version_requirements: *
|
124
|
+
version_requirements: *id010
|
114
125
|
- !ruby/object:Gem::Dependency
|
115
126
|
name: simplecov
|
116
|
-
requirement: &
|
127
|
+
requirement: &id011 !ruby/object:Gem::Requirement
|
117
128
|
none: false
|
118
129
|
requirements:
|
119
130
|
- - ~>
|
@@ -121,10 +132,10 @@ dependencies:
|
|
121
132
|
version: 0.5.4
|
122
133
|
type: :development
|
123
134
|
prerelease: false
|
124
|
-
version_requirements: *
|
135
|
+
version_requirements: *id011
|
125
136
|
- !ruby/object:Gem::Dependency
|
126
137
|
name: simplecov-rcov
|
127
|
-
requirement: &
|
138
|
+
requirement: &id012 !ruby/object:Gem::Requirement
|
128
139
|
none: false
|
129
140
|
requirements:
|
130
141
|
- - ">="
|
@@ -132,10 +143,10 @@ dependencies:
|
|
132
143
|
version: "0"
|
133
144
|
type: :development
|
134
145
|
prerelease: false
|
135
|
-
version_requirements: *
|
146
|
+
version_requirements: *id012
|
136
147
|
- !ruby/object:Gem::Dependency
|
137
148
|
name: gem_publisher
|
138
|
-
requirement: &
|
149
|
+
requirement: &id013 !ruby/object:Gem::Requirement
|
139
150
|
none: false
|
140
151
|
requirements:
|
141
152
|
- - ~>
|
@@ -143,10 +154,10 @@ dependencies:
|
|
143
154
|
version: 1.1.1
|
144
155
|
type: :development
|
145
156
|
prerelease: false
|
146
|
-
version_requirements: *
|
157
|
+
version_requirements: *id013
|
147
158
|
- !ruby/object:Gem::Dependency
|
148
159
|
name: timecop
|
149
|
-
requirement: &
|
160
|
+
requirement: &id014 !ruby/object:Gem::Requirement
|
150
161
|
none: false
|
151
162
|
requirements:
|
152
163
|
- - ~>
|
@@ -154,8 +165,8 @@ dependencies:
|
|
154
165
|
version: 0.5.1
|
155
166
|
type: :development
|
156
167
|
prerelease: false
|
157
|
-
version_requirements: *
|
158
|
-
description: A set of adapters providing easy access to the GDS
|
168
|
+
version_requirements: *id014
|
169
|
+
description: A set of adapters providing easy access to the GDS GOV.UK APIs
|
159
170
|
email:
|
160
171
|
- jystewart@gmail.com
|
161
172
|
executables: []
|
@@ -166,41 +177,41 @@ extra_rdoc_files: []
|
|
166
177
|
|
167
178
|
files:
|
168
179
|
- lib/gds_api/version.rb
|
169
|
-
- lib/gds_api/
|
180
|
+
- lib/gds_api/base.rb
|
181
|
+
- lib/gds_api/licence_application.rb
|
170
182
|
- lib/gds_api/panopticon/registerer.rb
|
171
|
-
- lib/gds_api/
|
172
|
-
- lib/gds_api/content_api.rb
|
183
|
+
- lib/gds_api/needotron.rb
|
173
184
|
- lib/gds_api/imminence.rb
|
174
|
-
- lib/gds_api/
|
175
|
-
- lib/gds_api/
|
176
|
-
- lib/gds_api/
|
185
|
+
- lib/gds_api/rummager.rb
|
186
|
+
- lib/gds_api/content_api.rb
|
187
|
+
- lib/gds_api/exceptions.rb
|
188
|
+
- lib/gds_api/json_client.rb
|
189
|
+
- lib/gds_api/core-ext/openstruct.rb
|
190
|
+
- lib/gds_api/response.rb
|
191
|
+
- lib/gds_api/content_api/list_response.rb
|
192
|
+
- lib/gds_api/publisher.rb
|
177
193
|
- lib/gds_api/test_helpers/licence_application.rb
|
194
|
+
- lib/gds_api/test_helpers/imminence.rb
|
195
|
+
- lib/gds_api/test_helpers/content_api.rb
|
178
196
|
- lib/gds_api/test_helpers/content_api/artefact_stub.rb
|
197
|
+
- lib/gds_api/test_helpers/publisher.rb
|
179
198
|
- lib/gds_api/test_helpers/panopticon.rb
|
180
199
|
- lib/gds_api/test_helpers/json_client_helper.rb
|
181
|
-
- lib/gds_api/licence_application.rb
|
182
|
-
- lib/gds_api/base.rb
|
183
|
-
- lib/gds_api/json_client.rb
|
184
|
-
- lib/gds_api/response.rb
|
185
|
-
- lib/gds_api/rummager.rb
|
186
|
-
- lib/gds_api/panopticon.rb
|
187
|
-
- lib/gds_api/core-ext/openstruct.rb
|
188
200
|
- lib/gds_api/part_methods.rb
|
189
|
-
- lib/gds_api/
|
190
|
-
- lib/gds_api/exceptions.rb
|
201
|
+
- lib/gds_api/panopticon.rb
|
191
202
|
- lib/gds_api/helpers.rb
|
192
203
|
- README.md
|
193
204
|
- Rakefile
|
194
|
-
- test/panopticon_api_test.rb
|
195
|
-
- test/publisher_api_test.rb
|
196
205
|
- test/rummager_test.rb
|
206
|
+
- test/publisher_api_test.rb
|
207
|
+
- test/licence_application_api_test.rb
|
208
|
+
- test/panopticon_api_test.rb
|
197
209
|
- test/imminence_api_test.rb
|
198
|
-
- test/panopticon_registerer_test.rb
|
199
|
-
- test/content_api_test.rb
|
200
210
|
- test/json_client_test.rb
|
201
|
-
- test/gds_api_base_test.rb
|
202
|
-
- test/licence_application_api_test.rb
|
203
211
|
- test/test_helper.rb
|
212
|
+
- test/gds_api_base_test.rb
|
213
|
+
- test/content_api_test.rb
|
214
|
+
- test/panopticon_registerer_test.rb
|
204
215
|
homepage: http://github.com/alphagov/gds-api-adapters
|
205
216
|
licenses: []
|
206
217
|
|
@@ -214,7 +225,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
214
225
|
requirements:
|
215
226
|
- - ">="
|
216
227
|
- !ruby/object:Gem::Version
|
217
|
-
hash:
|
228
|
+
hash: -1781835164135696191
|
218
229
|
segments:
|
219
230
|
- 0
|
220
231
|
version: "0"
|
@@ -223,7 +234,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
223
234
|
requirements:
|
224
235
|
- - ">="
|
225
236
|
- !ruby/object:Gem::Version
|
226
|
-
hash:
|
237
|
+
hash: -1781835164135696191
|
227
238
|
segments:
|
228
239
|
- 0
|
229
240
|
version: "0"
|
@@ -235,13 +246,13 @@ signing_key:
|
|
235
246
|
specification_version: 3
|
236
247
|
summary: Adapters to work with GDS APIs
|
237
248
|
test_files:
|
238
|
-
- test/panopticon_api_test.rb
|
239
|
-
- test/publisher_api_test.rb
|
240
249
|
- test/rummager_test.rb
|
250
|
+
- test/publisher_api_test.rb
|
251
|
+
- test/licence_application_api_test.rb
|
252
|
+
- test/panopticon_api_test.rb
|
241
253
|
- test/imminence_api_test.rb
|
242
|
-
- test/panopticon_registerer_test.rb
|
243
|
-
- test/content_api_test.rb
|
244
254
|
- test/json_client_test.rb
|
245
|
-
- test/gds_api_base_test.rb
|
246
|
-
- test/licence_application_api_test.rb
|
247
255
|
- test/test_helper.rb
|
256
|
+
- test/gds_api_base_test.rb
|
257
|
+
- test/content_api_test.rb
|
258
|
+
- test/panopticon_registerer_test.rb
|