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.
@@ -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
- get_json!("#{base_url}/tags.json?type=section")
9
+ get_list!("#{base_url}/tags.json?type=section")
9
10
  end
10
11
 
11
12
  def root_sections
12
- get_json!("#{base_url}/tags.json?type=section&root_sections=true")
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
- get_json!("#{base_url}/tags.json?type=section&parent_id=#{CGI.escape(parent_tag)}")
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
- get_json!("#{base_url}/with_tag.json?tag=#{CGI.escape(tag)}&include_children=1")
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
- get_json("#{base_url}/with_tag.json?tag=#{CGI.escape(tag)}&sort=curated")
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
- get_json!("#{base_url}/with_tag.json?tag=#{CGI.escape(tag)}&sort=#{sort_by}")
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
@@ -40,32 +40,28 @@ module GdsApi
40
40
  do_raw_request(Net::HTTP::Get, url)
41
41
  end
42
42
 
43
- def get_json(url)
44
- ignoring GdsApi::HTTPNotFound do
45
- get_json! url
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
- def do_json_request(method_class, url, params = nil)
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
- Response.new(response)
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
@@ -1,3 +1,3 @@
1
1
  module GdsApi
2
- VERSION = '4.1.3'
2
+ VERSION = '4.2.0'
3
3
  end
@@ -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.1.3
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: 2012-11-28 00:00:00 Z
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: lrucache
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: *id003
58
+ version_requirements: *id004
48
59
  - !ruby/object:Gem::Dependency
49
60
  name: rdoc
50
- requirement: &id004 !ruby/object:Gem::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: *id004
69
+ version_requirements: *id005
59
70
  - !ruby/object:Gem::Dependency
60
71
  name: rake
61
- requirement: &id005 !ruby/object:Gem::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: *id005
80
+ version_requirements: *id006
70
81
  - !ruby/object:Gem::Dependency
71
82
  name: webmock
72
- requirement: &id006 !ruby/object:Gem::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: *id006
91
+ version_requirements: *id007
81
92
  - !ruby/object:Gem::Dependency
82
93
  name: mocha
83
- requirement: &id007 !ruby/object:Gem::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: *id007
102
+ version_requirements: *id008
92
103
  - !ruby/object:Gem::Dependency
93
104
  name: minitest
94
- requirement: &id008 !ruby/object:Gem::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: *id008
113
+ version_requirements: *id009
103
114
  - !ruby/object:Gem::Dependency
104
115
  name: rack
105
- requirement: &id009 !ruby/object:Gem::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: *id009
124
+ version_requirements: *id010
114
125
  - !ruby/object:Gem::Dependency
115
126
  name: simplecov
116
- requirement: &id010 !ruby/object:Gem::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: *id010
135
+ version_requirements: *id011
125
136
  - !ruby/object:Gem::Dependency
126
137
  name: simplecov-rcov
127
- requirement: &id011 !ruby/object:Gem::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: *id011
146
+ version_requirements: *id012
136
147
  - !ruby/object:Gem::Dependency
137
148
  name: gem_publisher
138
- requirement: &id012 !ruby/object:Gem::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: *id012
157
+ version_requirements: *id013
147
158
  - !ruby/object:Gem::Dependency
148
159
  name: timecop
149
- requirement: &id013 !ruby/object:Gem::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: *id013
158
- description: A set of adapters providing easy access to the GDS gov.uk APIs
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/publisher.rb
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/typhoeus_client.rb
172
- - lib/gds_api/content_api.rb
183
+ - lib/gds_api/needotron.rb
173
184
  - lib/gds_api/imminence.rb
174
- - lib/gds_api/test_helpers/publisher.rb
175
- - lib/gds_api/test_helpers/content_api.rb
176
- - lib/gds_api/test_helpers/imminence.rb
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/needotron.rb
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: 306816274510639352
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: 306816274510639352
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
@@ -1,3 +0,0 @@
1
- require_relative 'response'
2
- require_relative 'exceptions'
3
- require_relative 'version'