rsolr 1.1.1.pre1 → 1.1.1.pre2
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.
- checksums.yaml +4 -4
- data/lib/rsolr/client.rb +41 -38
- data/lib/rsolr/connection.rb +15 -17
- data/lib/rsolr/version.rb +1 -1
- data/lib/rsolr/xml.rb +6 -3
- data/spec/api/client_spec.rb +81 -50
- data/spec/api/connection_spec.rb +33 -7
- data/spec/api/pagination_spec.rb +7 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bb1fa153ec3008beae75f53b9bb5e278bd68e2c3
|
4
|
+
data.tar.gz: ba02544b8e06337e000b58c659d0d253b7c1315d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3c4d111f9477a3f7d3e4b47295e33153e3c1579cc3814fc4d85245ee862f255c3b69e1e350d2d1464c0411d8d8a8aee0a3c0c307f0d47981c67cf239b3df8bd6
|
7
|
+
data.tar.gz: be60888b05bd5184e61c090e80d82a3b7389abb06af77eea06d75c1ea45c50eda1d2672cadcd2432f8e02d6a33f12895e9dbd55981857f7106c593499f35b3fb
|
data/lib/rsolr/client.rb
CHANGED
@@ -14,9 +14,9 @@ class RSolr::Client
|
|
14
14
|
@default_wt = value
|
15
15
|
end
|
16
16
|
end
|
17
|
-
|
17
|
+
|
18
18
|
attr_reader :connection, :uri, :proxy, :options, :update_path
|
19
|
-
|
19
|
+
|
20
20
|
def initialize connection, options = {}
|
21
21
|
@proxy = @uri = nil
|
22
22
|
@connection = connection
|
@@ -28,23 +28,24 @@ class RSolr::Client
|
|
28
28
|
proxy_url = options[:proxy].dup
|
29
29
|
proxy_url << "/" unless proxy_url.nil? or proxy_url[-1] == ?/
|
30
30
|
@proxy = RSolr::Uri.create proxy_url if proxy_url
|
31
|
+
elsif options[:proxy] == false
|
32
|
+
@proxy = false # used to avoid setting the proxy from the environment.
|
31
33
|
end
|
32
34
|
end
|
33
35
|
@update_path = options.fetch(:update_path, 'update')
|
34
36
|
@options = options
|
35
37
|
end
|
36
|
-
|
38
|
+
|
37
39
|
# returns the request uri object.
|
38
40
|
def base_request_uri
|
39
41
|
base_uri.request_uri if base_uri
|
40
42
|
end
|
41
|
-
|
42
|
-
# returns the uri
|
43
|
-
# otherwise just the uri object.
|
43
|
+
|
44
|
+
# returns the RSolr::URI uri object.
|
44
45
|
def base_uri
|
45
|
-
@
|
46
|
+
@uri
|
46
47
|
end
|
47
|
-
|
48
|
+
|
48
49
|
# Create the get, post, and head methods
|
49
50
|
%W(get post head).each do |meth|
|
50
51
|
class_eval <<-RUBY
|
@@ -53,7 +54,7 @@ class RSolr::Client
|
|
53
54
|
end
|
54
55
|
RUBY
|
55
56
|
end
|
56
|
-
|
57
|
+
|
57
58
|
# A paginated request method.
|
58
59
|
# Converts the page and per_page
|
59
60
|
# arguments into "rows" and "start".
|
@@ -63,9 +64,9 @@ class RSolr::Client
|
|
63
64
|
raise "'rows' or 'start' params should not be set when using +paginate+" if ["start", "rows"].include?(opts[:params].keys)
|
64
65
|
execute build_paginated_request(page, per_page, path, opts)
|
65
66
|
end
|
66
|
-
|
67
|
+
|
67
68
|
# POST XML messages to /update with optional params.
|
68
|
-
#
|
69
|
+
#
|
69
70
|
# http://wiki.apache.org/solr/UpdateXmlMessages#add.2BAC8-update
|
70
71
|
#
|
71
72
|
# If not set, opts[:headers] will be set to a hash with the key
|
@@ -82,22 +83,22 @@ class RSolr::Client
|
|
82
83
|
opts[:headers]['Content-Type'] ||= 'text/xml'
|
83
84
|
post opts.fetch(:path, update_path), opts
|
84
85
|
end
|
85
|
-
|
86
|
-
#
|
86
|
+
|
87
|
+
#
|
87
88
|
# +add+ creates xml "add" documents and sends the xml data to the +update+ method
|
88
|
-
#
|
89
|
+
#
|
89
90
|
# http://wiki.apache.org/solr/UpdateXmlMessages#add.2BAC8-update
|
90
|
-
#
|
91
|
+
#
|
91
92
|
# single record:
|
92
|
-
# solr.
|
93
|
+
# solr.add(:id=>1, :name=>'one')
|
94
|
+
#
|
95
|
+
# add using an array
|
93
96
|
#
|
94
|
-
#
|
95
|
-
#
|
96
|
-
# solr.update(
|
97
|
+
# solr.add(
|
97
98
|
# [{:id=>1, :name=>'one'}, {:id=>2, :name=>'two'}],
|
98
99
|
# :add_attributes => {:boost=>5.0, :commitWithin=>10}
|
99
100
|
# )
|
100
|
-
#
|
101
|
+
#
|
101
102
|
def add doc, opts = {}
|
102
103
|
add_attributes = opts.delete :add_attributes
|
103
104
|
update opts.merge(:data => xml.add(doc, add_attributes))
|
@@ -120,16 +121,16 @@ class RSolr::Client
|
|
120
121
|
optimize_attributes = opts.delete :optimize_attributes
|
121
122
|
update opts.merge(:data => xml.optimize(optimize_attributes))
|
122
123
|
end
|
123
|
-
|
124
|
+
|
124
125
|
# send </rollback>
|
125
|
-
#
|
126
|
+
#
|
126
127
|
# http://wiki.apache.org/solr/UpdateXmlMessages#A.22rollback.22
|
127
|
-
#
|
128
|
+
#
|
128
129
|
# NOTE: solr 1.4 only
|
129
130
|
def rollback opts = {}
|
130
131
|
update opts.merge(:data => xml.rollback)
|
131
132
|
end
|
132
|
-
|
133
|
+
|
133
134
|
# Delete one or many documents by id
|
134
135
|
# solr.delete_by_id 10
|
135
136
|
# solr.delete_by_id([12, 41, 199])
|
@@ -138,22 +139,22 @@ class RSolr::Client
|
|
138
139
|
end
|
139
140
|
|
140
141
|
# delete one or many documents by query.
|
141
|
-
#
|
142
|
+
#
|
142
143
|
# http://wiki.apache.org/solr/UpdateXmlMessages#A.22delete.22_by_ID_and_by_Query
|
143
|
-
#
|
144
|
+
#
|
144
145
|
# solr.delete_by_query 'available:0'
|
145
146
|
# solr.delete_by_query ['quantity:0', 'manu:"FQ"']
|
146
147
|
def delete_by_query query, opts = {}
|
147
148
|
update opts.merge(:data => xml.delete_by_query(query))
|
148
149
|
end
|
149
|
-
|
150
|
+
|
150
151
|
# shortcut to RSolr::Xml::Generator
|
151
152
|
def xml
|
152
153
|
@xml ||= RSolr::Xml::Generator.new
|
153
154
|
end
|
154
|
-
|
155
|
+
|
155
156
|
# +send_and_receive+ is the main request method responsible for sending requests to the +connection+ object.
|
156
|
-
#
|
157
|
+
#
|
157
158
|
# "path" : A string value that usually represents a solr request handler
|
158
159
|
# "opts" : A hash, which can contain the following keys:
|
159
160
|
# :method : required - the http method (:get, :post or :head)
|
@@ -161,7 +162,7 @@ class RSolr::Client
|
|
161
162
|
# :data : optional - post data -- if a hash is given, it's sent as "application/x-www-form-urlencoded; charset=UTF-8"
|
162
163
|
# :headers : optional - hash of request headers
|
163
164
|
# All other options are passed right along to the connection's +send_and_receive+ method (:get, :post, or :head)
|
164
|
-
#
|
165
|
+
#
|
165
166
|
# +send_and_receive+ returns either a string or hash on a successful ruby request.
|
166
167
|
# When the :params[:wt] => :ruby, the response will be a hash, else a string.
|
167
168
|
#
|
@@ -171,13 +172,10 @@ class RSolr::Client
|
|
171
172
|
# then passes the request/response into +adapt_response+.
|
172
173
|
def send_and_receive path, opts
|
173
174
|
request_context = build_request path, opts
|
174
|
-
[:open_timeout, :read_timeout, :retry_503, :retry_after_limit].each do |k|
|
175
|
-
request_context[k] = @options[k]
|
176
|
-
end
|
177
175
|
execute request_context
|
178
176
|
end
|
179
|
-
|
180
|
-
#
|
177
|
+
|
178
|
+
#
|
181
179
|
def execute request_context
|
182
180
|
|
183
181
|
raw_response = connection.execute self, request_context
|
@@ -214,13 +212,13 @@ class RSolr::Client
|
|
214
212
|
retry_after_date = DateTime.parse(retry_after)
|
215
213
|
retry_after = retry_after_date.to_time - Time.now
|
216
214
|
retry_after = nil if retry_after < 0
|
217
|
-
rescue ArgumentError
|
215
|
+
rescue ArgumentError
|
218
216
|
retry_after = retry_after.to_i
|
219
217
|
end
|
220
218
|
end
|
221
219
|
retry_after
|
222
220
|
end
|
223
|
-
|
221
|
+
|
224
222
|
# +build_request+ accepts a path and options hash,
|
225
223
|
# then prepares a normalized hash to return for sending
|
226
224
|
# to a solr connection driver.
|
@@ -251,6 +249,11 @@ class RSolr::Client
|
|
251
249
|
end
|
252
250
|
opts[:path] = path
|
253
251
|
opts[:uri] = base_uri.merge(path.to_s + (query ? "?#{query}" : "")) if base_uri
|
252
|
+
|
253
|
+
[:open_timeout, :read_timeout, :retry_503, :retry_after_limit].each do |k|
|
254
|
+
opts[k] = @options[k]
|
255
|
+
end
|
256
|
+
|
254
257
|
opts
|
255
258
|
end
|
256
259
|
|
@@ -307,7 +310,7 @@ class RSolr::Client
|
|
307
310
|
send_and_receive name, *args
|
308
311
|
end
|
309
312
|
end
|
310
|
-
|
313
|
+
|
311
314
|
# evaluates the response[:body],
|
312
315
|
# attempts to bring the ruby string to life.
|
313
316
|
# If a SyntaxError is raised, then
|
data/lib/rsolr/connection.rb
CHANGED
@@ -15,7 +15,7 @@ class RSolr::Connection
|
|
15
15
|
response = h.request request
|
16
16
|
charset = response.type_params["charset"]
|
17
17
|
{:status => response.code.to_i, :headers => response.to_hash, :body => force_charset(response.body, charset)}
|
18
|
-
rescue Errno::ECONNREFUSED
|
18
|
+
rescue Errno::ECONNREFUSED
|
19
19
|
raise RSolr::Error::ConnectionRefused, request_context.inspect
|
20
20
|
# catch the undefined closed? exception -- this is a confirmed ruby bug
|
21
21
|
rescue NoMethodError => e
|
@@ -29,22 +29,20 @@ class RSolr::Connection
|
|
29
29
|
|
30
30
|
# This returns a singleton of a Net::HTTP or Net::HTTP.Proxy request object.
|
31
31
|
def http uri, proxy = nil, read_timeout = nil, open_timeout = nil
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
http
|
47
|
-
)
|
32
|
+
http = if proxy
|
33
|
+
proxy_user, proxy_pass = proxy.userinfo.split(/:/) if proxy.userinfo
|
34
|
+
Net::HTTP.Proxy(proxy.host, proxy.port, proxy_user, proxy_pass).new uri.host, uri.port
|
35
|
+
elsif proxy == false
|
36
|
+
# If explicitly passing in false, make sure we set proxy_addr to nil
|
37
|
+
# to tell Net::HTTP to *not* use the environment proxy variables.
|
38
|
+
Net::HTTP.new uri.host, uri.port, nil
|
39
|
+
else
|
40
|
+
Net::HTTP.new uri.host, uri.port
|
41
|
+
end
|
42
|
+
http.use_ssl = uri.port == 443 || uri.instance_of?(URI::HTTPS)
|
43
|
+
http.read_timeout = read_timeout if read_timeout
|
44
|
+
http.open_timeout = open_timeout if open_timeout
|
45
|
+
http
|
48
46
|
end
|
49
47
|
|
50
48
|
#
|
data/lib/rsolr/version.rb
CHANGED
data/lib/rsolr/xml.rb
CHANGED
@@ -51,10 +51,13 @@ module RSolr::Xml
|
|
51
51
|
private
|
52
52
|
|
53
53
|
def format_value(v)
|
54
|
-
|
55
|
-
|
56
|
-
|
54
|
+
case v
|
55
|
+
when Time
|
56
|
+
v.getutc.iso8601
|
57
|
+
when DateTime
|
57
58
|
v.to_time.getutc.iso8601
|
59
|
+
when Date
|
60
|
+
Time.utc(v.year, v.mon, v.mday).iso8601
|
58
61
|
else
|
59
62
|
v.to_s
|
60
63
|
end
|
data/spec/api/client_spec.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
describe "RSolr::Client" do
|
3
|
-
|
3
|
+
|
4
4
|
module ClientHelper
|
5
5
|
def client
|
6
6
|
@client ||= (
|
@@ -8,30 +8,52 @@ describe "RSolr::Client" do
|
|
8
8
|
RSolr::Client.new connection, :url => "http://localhost:9999/solr", :read_timeout => 42, :open_timeout=>43
|
9
9
|
)
|
10
10
|
end
|
11
|
+
|
12
|
+
def client_with_proxy
|
13
|
+
@client_with_proxy ||= (
|
14
|
+
connection = RSolr::Connection.new
|
15
|
+
RSolr::Client.new connection, :url => "http://localhost:9999/solr", :proxy => 'http://localhost:8080', :read_timeout => 42, :open_timeout=>43
|
16
|
+
)
|
17
|
+
end
|
11
18
|
end
|
12
|
-
|
19
|
+
|
13
20
|
context "initialize" do
|
14
21
|
it "should accept whatevs and set it as the @connection" do
|
15
22
|
expect(RSolr::Client.new(:whatevs).connection).to eq(:whatevs)
|
16
23
|
end
|
17
|
-
|
24
|
+
|
18
25
|
it "should use :update_path from options" do
|
19
26
|
client = RSolr::Client.new(:whatevs, { update_path: 'update_test' })
|
20
27
|
expect(client.update_path).to eql('update_test')
|
21
28
|
end
|
22
|
-
|
29
|
+
|
23
30
|
it "should use 'update' for update_path by default" do
|
24
31
|
client = RSolr::Client.new(:whatevs)
|
25
32
|
expect(client.update_path).to eql('update')
|
26
33
|
end
|
34
|
+
|
35
|
+
it "should use :proxy from options" do
|
36
|
+
client = RSolr::Client.new(:whatevs, { proxy: 'http://my.proxy/' })
|
37
|
+
expect(client.proxy.to_s).to eql('http://my.proxy/')
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should use 'nil' for proxy by default" do
|
41
|
+
client = RSolr::Client.new(:whatevs)
|
42
|
+
expect(client.proxy).to be_nil
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should use 'false' for proxy if passed 'false'" do
|
46
|
+
client = RSolr::Client.new(:whatevs, { proxy: false })
|
47
|
+
expect(client.proxy).to eq(false)
|
48
|
+
end
|
27
49
|
end
|
28
|
-
|
50
|
+
|
29
51
|
context "send_and_receive" do
|
30
52
|
include ClientHelper
|
31
53
|
it "should forward these method calls the #connection object" do
|
32
54
|
[:get, :post, :head].each do |meth|
|
33
55
|
expect(client.connection).to receive(:execute).
|
34
|
-
|
56
|
+
and_return({:status => 200, :body => "{}", :headers => {}})
|
35
57
|
client.send_and_receive '', :method => meth, :params => {}, :data => nil, :headers => {}
|
36
58
|
end
|
37
59
|
end
|
@@ -87,17 +109,17 @@ describe "RSolr::Client" do
|
|
87
109
|
:status => 200,
|
88
110
|
:headers => {"Content-Type"=>"text/plain"}
|
89
111
|
)
|
90
|
-
|
112
|
+
client.post "update", request_opts
|
91
113
|
end
|
92
114
|
end
|
93
|
-
|
115
|
+
|
94
116
|
context "xml" do
|
95
117
|
include ClientHelper
|
96
118
|
it "should return an instance of RSolr::Xml::Generator" do
|
97
119
|
expect(client.xml).to be_a RSolr::Xml::Generator
|
98
120
|
end
|
99
121
|
end
|
100
|
-
|
122
|
+
|
101
123
|
context "add" do
|
102
124
|
include ClientHelper
|
103
125
|
it "should send xml to the connection's #post method" do
|
@@ -109,19 +131,19 @@ describe "RSolr::Client" do
|
|
109
131
|
:method => :post,
|
110
132
|
:data => "<xml/>"
|
111
133
|
})
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
134
|
+
).
|
135
|
+
and_return(
|
136
|
+
:body => "",
|
137
|
+
:status => 200,
|
138
|
+
:headers => {"Content-Type"=>"text/xml"}
|
139
|
+
)
|
118
140
|
expect(client.xml).to receive(:add).
|
119
141
|
with({:id=>1}, {:commitWith=>10}).
|
120
|
-
|
142
|
+
and_return("<xml/>")
|
121
143
|
client.add({:id=>1}, :add_attributes => {:commitWith=>10})
|
122
144
|
end
|
123
145
|
end
|
124
|
-
|
146
|
+
|
125
147
|
context "update" do
|
126
148
|
include ClientHelper
|
127
149
|
it "should send data to the connection's #post method" do
|
@@ -133,12 +155,12 @@ describe "RSolr::Client" do
|
|
133
155
|
:method => :post,
|
134
156
|
:data => "<optimize/>"
|
135
157
|
})
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
158
|
+
).
|
159
|
+
and_return(
|
160
|
+
:body => "",
|
161
|
+
:status => 200,
|
162
|
+
:headers => {"Content-Type"=>"text/xml"}
|
163
|
+
)
|
142
164
|
client.update(:data => "<optimize/>")
|
143
165
|
end
|
144
166
|
|
@@ -147,14 +169,14 @@ describe "RSolr::Client" do
|
|
147
169
|
expect(client).to receive(:update_path).and_return('update_test')
|
148
170
|
client.update({})
|
149
171
|
end
|
150
|
-
|
172
|
+
|
151
173
|
it "should use path from opts" do
|
152
174
|
expect(client).to receive(:post).with('update_opts', any_args)
|
153
175
|
allow(client).to receive(:update_path).and_return('update_test')
|
154
176
|
client.update({path: 'update_opts'})
|
155
177
|
end
|
156
178
|
end
|
157
|
-
|
179
|
+
|
158
180
|
context "post based helper methods:" do
|
159
181
|
include ClientHelper
|
160
182
|
[:commit, :optimize, :rollback].each do |meth|
|
@@ -167,17 +189,17 @@ describe "RSolr::Client" do
|
|
167
189
|
:method => :post,
|
168
190
|
:data => "<?xml version=\"1.0\" encoding=\"UTF-8\"?><#{meth}/>"
|
169
191
|
})
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
192
|
+
).
|
193
|
+
and_return(
|
194
|
+
:body => "",
|
195
|
+
:status => 200,
|
196
|
+
:headers => {"Content-Type"=>"text/xml"}
|
197
|
+
)
|
176
198
|
client.send meth
|
177
199
|
end
|
178
200
|
end
|
179
201
|
end
|
180
|
-
|
202
|
+
|
181
203
|
context "delete_by_id" do
|
182
204
|
include ClientHelper
|
183
205
|
it "should send data to the connection's #post method" do
|
@@ -189,16 +211,16 @@ describe "RSolr::Client" do
|
|
189
211
|
:method => :post,
|
190
212
|
:data => "<?xml version=\"1.0\" encoding=\"UTF-8\"?><delete><id>1</id></delete>"
|
191
213
|
})
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
214
|
+
).
|
215
|
+
and_return(
|
216
|
+
:body => "",
|
217
|
+
:status => 200,
|
218
|
+
:headers => {"Content-Type"=>"text/xml"}
|
219
|
+
)
|
198
220
|
client.delete_by_id 1
|
199
221
|
end
|
200
222
|
end
|
201
|
-
|
223
|
+
|
202
224
|
context "delete_by_query" do
|
203
225
|
include ClientHelper
|
204
226
|
it "should send data to the connection's #post method" do
|
@@ -210,16 +232,16 @@ describe "RSolr::Client" do
|
|
210
232
|
:method => :post,
|
211
233
|
:data => "<?xml version=\"1.0\" encoding=\"UTF-8\"?><delete><query fq=\"category:"trash"\"/></delete>"
|
212
234
|
})
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
235
|
+
).
|
236
|
+
and_return(
|
237
|
+
:body => "",
|
238
|
+
:status => 200,
|
239
|
+
:headers => {"Content-Type"=>"text/xml"}
|
240
|
+
)
|
219
241
|
client.delete_by_query :fq => "category:\"trash\""
|
220
242
|
end
|
221
243
|
end
|
222
|
-
|
244
|
+
|
223
245
|
context "adapt_response" do
|
224
246
|
include ClientHelper
|
225
247
|
it 'should not try to evaluate ruby when the :qt is not :ruby' do
|
@@ -227,13 +249,13 @@ describe "RSolr::Client" do
|
|
227
249
|
result = client.adapt_response({:params=>{}}, {:status => 200, :body => body, :headers => {}})
|
228
250
|
expect(result).to eq(body)
|
229
251
|
end
|
230
|
-
|
252
|
+
|
231
253
|
it 'should evaluate ruby responses when the :wt is :ruby' do
|
232
254
|
body = '{"time"=>"NOW"}'
|
233
255
|
result = client.adapt_response({:params=>{:wt=>:ruby}}, {:status => 200, :body => body, :headers => {}})
|
234
256
|
expect(result).to eq({"time"=>"NOW"})
|
235
257
|
end
|
236
|
-
|
258
|
+
|
237
259
|
it 'should evaluate json responses when the :wt is :json' do
|
238
260
|
body = '{"time": "NOW"}'
|
239
261
|
result = client.adapt_response({:params=>{:wt=>:json}}, {:status => 200, :body => body, :headers => {}})
|
@@ -255,9 +277,9 @@ describe "RSolr::Client" do
|
|
255
277
|
client.adapt_response({:params=>{:wt => :ruby}}, {:status => 200, :body => "<woops/>", :headers => {}})
|
256
278
|
}.to raise_error RSolr::Error::InvalidRubyResponse
|
257
279
|
end
|
258
|
-
|
280
|
+
|
259
281
|
end
|
260
|
-
|
282
|
+
|
261
283
|
context "indifferent access" do
|
262
284
|
include ClientHelper
|
263
285
|
it "should raise a RuntimeError if the #with_indifferent_access extension isn't loaded" do
|
@@ -322,5 +344,14 @@ describe "RSolr::Client" do
|
|
322
344
|
expect(subject[:headers]).to eq({"Content-Type" => "application/x-www-form-urlencoded; charset=UTF-8"})
|
323
345
|
end
|
324
346
|
end
|
347
|
+
|
348
|
+
it "should properly handle proxy configuration" do
|
349
|
+
result = client_with_proxy.build_request('select',
|
350
|
+
:method => :post,
|
351
|
+
:data => {:q=>'test', :fq=>[0,1]},
|
352
|
+
:headers => {}
|
353
|
+
)
|
354
|
+
result[:uri].to_s.should match /^http:\/\/localhost:9999\/solr\//
|
355
|
+
end
|
325
356
|
end
|
326
357
|
end
|
data/spec/api/connection_spec.rb
CHANGED
@@ -2,7 +2,7 @@ require 'spec_helper'
|
|
2
2
|
require 'base64'
|
3
3
|
|
4
4
|
describe "RSolr::Connection" do
|
5
|
-
|
5
|
+
|
6
6
|
context "setup_raw_request" do
|
7
7
|
it "should set the correct request parameters" do
|
8
8
|
c = RSolr::Connection.new
|
@@ -35,7 +35,7 @@ describe "RSolr::Connection" do
|
|
35
35
|
|
36
36
|
let(:http) { double(Net::HTTP).as_null_object }
|
37
37
|
|
38
|
-
subject { RSolr::Connection.new }
|
38
|
+
subject { RSolr::Connection.new }
|
39
39
|
|
40
40
|
before do
|
41
41
|
allow(Net::HTTP).to receive(:new) { http }
|
@@ -57,7 +57,7 @@ describe "RSolr::Connection" do
|
|
57
57
|
|
58
58
|
let(:http) { double(Net::HTTP).as_null_object }
|
59
59
|
|
60
|
-
subject { RSolr::Connection.new }
|
60
|
+
subject { RSolr::Connection.new }
|
61
61
|
|
62
62
|
before do
|
63
63
|
allow(Net::HTTP).to receive(:new) { http }
|
@@ -74,6 +74,32 @@ describe "RSolr::Connection" do
|
|
74
74
|
end
|
75
75
|
end
|
76
76
|
|
77
|
+
context "proxy configuration" do
|
78
|
+
let(:client) { double.as_null_object }
|
79
|
+
|
80
|
+
let(:http) { double(Net::HTTP).as_null_object }
|
81
|
+
|
82
|
+
let(:uri) { URI.parse("http://localhost/some_url") }
|
83
|
+
let(:proxy) { URI.parse("http://my.proxy/") }
|
84
|
+
|
85
|
+
subject { RSolr::Connection.new }
|
86
|
+
|
87
|
+
it "should use the default if no proxy is provided" do
|
88
|
+
expect(Net::HTTP).to receive(:new).with(uri.host, uri.port) { http }
|
89
|
+
subject.execute client, { :uri => uri, :method => :get }
|
90
|
+
end
|
91
|
+
|
92
|
+
it "should use the proxy if one is provided" do
|
93
|
+
expect(Net::HTTP).to receive(:Proxy).with(proxy.host, proxy.port, nil, nil) { http }
|
94
|
+
subject.execute client, { :uri => uri, :proxy => proxy, :method => :get }
|
95
|
+
end
|
96
|
+
|
97
|
+
it "should not use a proxy if proxy setting is false" do
|
98
|
+
expect(Net::HTTP).to receive(:new).with(uri.host, uri.port, nil) { http }
|
99
|
+
subject.execute client, { :uri => uri, :proxy => false, :method => :get }
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
77
103
|
context "connection refused" do
|
78
104
|
let(:client) { double.as_null_object }
|
79
105
|
|
@@ -81,7 +107,7 @@ describe "RSolr::Connection" do
|
|
81
107
|
let(:request_context) {
|
82
108
|
{:uri => URI.parse("http://localhost/some_uri"), :method => :get, :open_timeout => 42}
|
83
109
|
}
|
84
|
-
subject { RSolr::Connection.new }
|
110
|
+
subject { RSolr::Connection.new }
|
85
111
|
|
86
112
|
before do
|
87
113
|
allow(Net::HTTP).to receive(:new) { http }
|
@@ -95,14 +121,14 @@ describe "RSolr::Connection" do
|
|
95
121
|
}.to raise_error(Errno::ECONNREFUSED, /#{request_context}/)
|
96
122
|
end
|
97
123
|
end
|
98
|
-
|
124
|
+
|
99
125
|
describe "basic auth support" do
|
100
126
|
let(:http) { double(Net::HTTP).as_null_object }
|
101
|
-
|
127
|
+
|
102
128
|
before do
|
103
129
|
allow(Net::HTTP).to receive(:new) { http }
|
104
130
|
end
|
105
|
-
|
131
|
+
|
106
132
|
it "sets the authorization header" do
|
107
133
|
expect(http).to receive(:request) do |request|
|
108
134
|
expect(request.fetch('authorization')).to eq("Basic #{Base64.encode64("joe:pass")}".strip)
|
data/spec/api/pagination_spec.rb
CHANGED
@@ -11,6 +11,13 @@ describe "RSolr::Pagination" do
|
|
11
11
|
expect(r[:uri].query).to match(/rows=25/)
|
12
12
|
expect(r[:uri].query).to match(/start=50/)
|
13
13
|
end
|
14
|
+
|
15
|
+
it 'passes through client options' do
|
16
|
+
c = RSolr::Client.new(nil, open_timeout: 5, read_timeout: 7)
|
17
|
+
r = c.build_paginated_request 3, 25, "select", {:params => {:q => "test"}}
|
18
|
+
expect(r[:open_timeout]).to eq(5)
|
19
|
+
expect(r[:read_timeout]).to eq(7)
|
20
|
+
end
|
14
21
|
end
|
15
22
|
context "paginate" do
|
16
23
|
it "should build a paginated request context and call execute" do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rsolr
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.1.
|
4
|
+
version: 1.1.1.pre2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Antoine Latter
|
@@ -29,7 +29,7 @@ authors:
|
|
29
29
|
autorequire:
|
30
30
|
bindir: bin
|
31
31
|
cert_chain: []
|
32
|
-
date: 2016-02-
|
32
|
+
date: 2016-02-22 00:00:00.000000000 Z
|
33
33
|
dependencies:
|
34
34
|
- !ruby/object:Gem::Dependency
|
35
35
|
name: builder
|