gds-api-adapters 4.1.3 → 4.2.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.
@@ -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'