gds-api-adapters 4.7.0 → 4.8.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/rummager.rb +16 -0
- data/lib/gds_api/version.rb +1 -1
- data/test/rummager_test.rb +63 -1
- metadata +3 -3
data/lib/gds_api/rummager.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'rack/utils'
|
2
|
+
|
1
3
|
module GdsApi
|
2
4
|
class Rummager
|
3
5
|
class SearchUriNotSpecified < RuntimeError; end
|
@@ -22,11 +24,25 @@ module GdsApi
|
|
22
24
|
search_response(:autocomplete, query, format_filter).body
|
23
25
|
end
|
24
26
|
|
27
|
+
def advanced_search(args)
|
28
|
+
return [] if args.nil? || args.empty?
|
29
|
+
JSON.parse(advanced_search_response(args).body)
|
30
|
+
end
|
31
|
+
|
25
32
|
private
|
26
33
|
|
34
|
+
def advanced_search_response(args)
|
35
|
+
request_path = "/advanced_search?#{Rack::Utils.build_nested_query(args)}"
|
36
|
+
get_response(request_path)
|
37
|
+
end
|
38
|
+
|
27
39
|
def search_response(type, query, format_filter = nil)
|
28
40
|
request_path = "/#{type}?q=#{CGI.escape(query)}"
|
29
41
|
request_path << "&format_filter=#{CGI.escape(format_filter)}" if format_filter
|
42
|
+
get_response(request_path)
|
43
|
+
end
|
44
|
+
|
45
|
+
def get_response(request_path)
|
30
46
|
uri = URI("#{search_uri}#{request_path}")
|
31
47
|
http = Net::HTTP.new(uri.host, uri.port)
|
32
48
|
http.use_ssl = true if uri.scheme == 'https'
|
data/lib/gds_api/version.rb
CHANGED
data/test/rummager_test.rb
CHANGED
@@ -5,6 +5,7 @@ describe GdsApi::Rummager do
|
|
5
5
|
before(:each) do
|
6
6
|
stub_request(:get, /example.com\/search/).to_return(body: "[]")
|
7
7
|
stub_request(:get, /example.com\/autocomplete/).to_return(body: "[]")
|
8
|
+
stub_request(:get, /example.com\/advanced_search/).to_return(body: "[]")
|
8
9
|
end
|
9
10
|
|
10
11
|
it "should raise an exception if the search service uri is not set" do
|
@@ -101,7 +102,7 @@ describe GdsApi::Rummager do
|
|
101
102
|
it "should escape characters that would otherwise be invalid in a URI" do
|
102
103
|
GdsApi::Rummager.new("http://example.com").search "search term with spaces"
|
103
104
|
|
104
|
-
#
|
105
|
+
#the actual request is "?q=search+term+with+spaces", but Webmock appears to be re-escaping.
|
105
106
|
assert_requested :get, /\?q=search%20term%20with%20spaces/
|
106
107
|
end
|
107
108
|
|
@@ -112,4 +113,65 @@ describe GdsApi::Rummager do
|
|
112
113
|
|
113
114
|
assert_equal search_results_json, results
|
114
115
|
end
|
116
|
+
|
117
|
+
# tests for #advanced_search
|
118
|
+
|
119
|
+
it "#advanced_search should raise an exception if the service at the search URI returns a 500" do
|
120
|
+
stub_request(:get, /example.com\/advanced_search/).to_return(status: [500, "Internal Server Error"])
|
121
|
+
assert_raises(GdsApi::Rummager::SearchServiceError) do
|
122
|
+
GdsApi::Rummager.new("http://example.com").advanced_search({keywords: "query"})
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
it "#advanced_search should raise an exception if the service at the search URI returns a 404" do
|
127
|
+
stub_request(:get, /example.com\/advanced_search/).to_return(status: [404, "Not Found"])
|
128
|
+
assert_raises(GdsApi::Rummager::SearchServiceError) do
|
129
|
+
GdsApi::Rummager.new("http://example.com").advanced_search({keywords: "query"})
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
it "#advanced_search should raise an exception if the service at the search URI times out" do
|
134
|
+
stub_request(:get, /example.com\/advanced_search/).to_timeout
|
135
|
+
assert_raises(GdsApi::Rummager::SearchTimeout) do
|
136
|
+
GdsApi::Rummager.new("http://example.com").advanced_search({keywords: "query"})
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
it "#advanced_search should return the search deserialized from json" do
|
141
|
+
search_results = [{"title" => "document-title"}]
|
142
|
+
stub_request(:get, /example.com\/advanced_search/).to_return(body: search_results.to_json)
|
143
|
+
results = GdsApi::Rummager.new("http://example.com").advanced_search({keywords: "query"})
|
144
|
+
|
145
|
+
assert_equal search_results, results
|
146
|
+
end
|
147
|
+
|
148
|
+
it "#advanced_search should return an empty set of results without making request if arguments are empty" do
|
149
|
+
results = GdsApi::Rummager.new("http://example.com").advanced_search({})
|
150
|
+
|
151
|
+
assert_equal [], results
|
152
|
+
assert_not_requested :get, /example.com/
|
153
|
+
end
|
154
|
+
|
155
|
+
it "#advanced_search should return an empty set of results without making request if arguments is nil" do
|
156
|
+
results = GdsApi::Rummager.new("http://example.com").advanced_search(nil)
|
157
|
+
|
158
|
+
assert_equal [], results
|
159
|
+
assert_not_requested :get, /example.com/
|
160
|
+
end
|
161
|
+
|
162
|
+
it "#advanced_search should request the search results in JSON format" do
|
163
|
+
GdsApi::Rummager.new("http://example.com").advanced_search({keywords: "query"})
|
164
|
+
|
165
|
+
assert_requested :get, /.*/, headers: {"Accept" => "application/json"}
|
166
|
+
end
|
167
|
+
|
168
|
+
it "#advanced_search should issue a request for all the params supplied" do
|
169
|
+
GdsApi::Rummager.new("http://example.com").advanced_search({keywords: "query & stuff", topics: ["1","2"], order: {public_timestamp: "desc"}})
|
170
|
+
|
171
|
+
#the actual request is "?keywords=query+%26+stuff&topic[0]=1&topic[1]=2&order[public_timestamp]=desc", but Webmock appears to be re-escaping.
|
172
|
+
assert_requested :get, /keywords=query%20%26%20stuff/
|
173
|
+
assert_requested :get, /topics%5B0%5D=1&topics%5B1%5D=2/
|
174
|
+
assert_requested :get, /order%5Bpublic_timestamp%5D=desc/
|
175
|
+
end
|
176
|
+
|
115
177
|
end
|
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.8.0
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- James Stewart
|
@@ -239,7 +239,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
239
239
|
requirements:
|
240
240
|
- - ">="
|
241
241
|
- !ruby/object:Gem::Version
|
242
|
-
hash:
|
242
|
+
hash: 1465373721783648305
|
243
243
|
segments:
|
244
244
|
- 0
|
245
245
|
version: "0"
|
@@ -248,7 +248,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
248
248
|
requirements:
|
249
249
|
- - ">="
|
250
250
|
- !ruby/object:Gem::Version
|
251
|
-
hash:
|
251
|
+
hash: 1465373721783648305
|
252
252
|
segments:
|
253
253
|
- 0
|
254
254
|
version: "0"
|