rsolr 1.0.0.beta → 1.0.0.beta2
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/README.rdoc +55 -43
- data/VERSION +1 -1
- data/lib/rsolr/client.rb +72 -87
- data/lib/rsolr/connectable.rb +95 -0
- data/lib/rsolr/error.rb +7 -16
- data/lib/rsolr/http.rb +82 -89
- data/lib/rsolr/uri.rb +2 -0
- data/lib/rsolr/xml.rb +17 -12
- data/lib/rsolr.rb +6 -16
- data/spec/api/char_spec.rb +18 -0
- data/spec/api/client_spec.rb +158 -0
- data/spec/api/connectable_spec.rb +56 -0
- data/spec/api/http_spec.rb +14 -0
- data/spec/api/{rsolr_uri_spec.rb → uri_spec.rb} +0 -0
- data/spec/api/{rsolr_xml_spec.rb → xml_spec.rb} +1 -1
- metadata +10 -9
- data/spec/api/rsolr_client_spec.rb +0 -195
- data/spec/api/rsolr_error_spec.rb +0 -4
- data/spec/api/rsolr_http_spec.rb +0 -4
- data/spec/api/rsolr_spec.rb +0 -17
@@ -1,195 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
describe "RSolr::Client" do
|
3
|
-
|
4
|
-
module ClientHelper
|
5
|
-
def client
|
6
|
-
@client ||= (
|
7
|
-
connection = RSolr::Http.new URI.parse("http://localhost:9999/solr")
|
8
|
-
RSolr::Client.new(connection)
|
9
|
-
)
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
context "initialize" do
|
14
|
-
it "should accept whatevs and set it as the @connection" do
|
15
|
-
RSolr::Client.new(:whatevs).connection.should == :whatevs
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
context "adapt_response" do
|
20
|
-
|
21
|
-
include ClientHelper
|
22
|
-
|
23
|
-
it 'should not try to evaluate ruby when the :qt is not :ruby' do
|
24
|
-
body = '{:time=>"NOW"}'
|
25
|
-
result = client.send(:adapt_response, {:params=>{}}, {:body => body})
|
26
|
-
result.should be_a(String)
|
27
|
-
result.should == body
|
28
|
-
end
|
29
|
-
|
30
|
-
it 'should evaluate ruby responses when the :wt is :ruby' do
|
31
|
-
body = '{:time=>"NOW"}'
|
32
|
-
result = client.send(:adapt_response, {:params=>{:wt=>:ruby}}, {:body=>body})
|
33
|
-
result.should be_a(Hash)
|
34
|
-
result.should == {:time=>"NOW"}
|
35
|
-
end
|
36
|
-
|
37
|
-
["nil", :ruby].each do |wt|
|
38
|
-
it "should return an object that responds to :request and :response when :wt == #{wt}" do
|
39
|
-
req = {:params=>{:wt=>wt}}
|
40
|
-
res = {:body=>""}
|
41
|
-
result = client.send(:adapt_response, req, res)
|
42
|
-
result.request.should == req
|
43
|
-
result.response.should == res
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
it "ought raise a RSolr::Error::InvalidRubyResponse when the ruby is indeed frugged" do
|
48
|
-
lambda {
|
49
|
-
client.send(:adapt_response, {:params=>{:wt => :ruby}}, {:body => "<woops/>"})
|
50
|
-
}.should raise_error RSolr::Error::InvalidRubyResponse
|
51
|
-
end
|
52
|
-
|
53
|
-
end
|
54
|
-
|
55
|
-
context "build_request" do
|
56
|
-
include ClientHelper
|
57
|
-
it 'should return a request context array' do
|
58
|
-
result = client.build_request 'select', {:q=>'test', :fq=>[0,1]}, "data", headers = {}
|
59
|
-
["select?fq=0&fq=1&q=test", "select?q=test&fq=0&fq=1"].should include(result[0].to_s)
|
60
|
-
result[1].should == "data"
|
61
|
-
result[2].should == headers
|
62
|
-
end
|
63
|
-
it "should set the Content-Type header to application/x-www-form-urlencoded if a hash is passed in to the data arg" do
|
64
|
-
result = client.build_request 'select', nil, {:q=>'test', :fq=>[0,1]}, headers = {}
|
65
|
-
result[0].to_s.should == "select"
|
66
|
-
["fq=0&fq=1&q=test", "q=test&fq=0&fq=1"].should include(result[1])
|
67
|
-
result[2].should == headers
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
context "map_params" do
|
72
|
-
include ClientHelper
|
73
|
-
it "should return a hash if nil is passed in" do
|
74
|
-
client.map_params(nil).should == {:wt => :ruby}
|
75
|
-
end
|
76
|
-
it "should set the :wt to ruby if blank" do
|
77
|
-
r = client.map_params({:q=>"q"})
|
78
|
-
r[:q].should == "q"
|
79
|
-
r[:wt].should == :ruby
|
80
|
-
end
|
81
|
-
it "should not override the :wt to ruby if set" do
|
82
|
-
r = client.map_params({:q=>"q", :wt => :json})
|
83
|
-
r[:q].should == "q"
|
84
|
-
r[:wt].should == :json
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
context "send_request" do
|
89
|
-
include ClientHelper
|
90
|
-
it "should forward these method calls the #connection object" do
|
91
|
-
[:get, :post, :head].each do |meth|
|
92
|
-
client.connection.should_receive(meth).
|
93
|
-
and_return({:status => 200})
|
94
|
-
client.send_request meth, '', {}, nil, {}
|
95
|
-
end
|
96
|
-
end
|
97
|
-
it "should extend any exception raised by the #connection object with a RSolr::Error::SolrContext" do
|
98
|
-
client.connection.should_receive(:get).
|
99
|
-
and_raise(RuntimeError)
|
100
|
-
lambda {
|
101
|
-
client.send_request :get, '', {}, nil, {}
|
102
|
-
}.should raise_error(RuntimeError){|error|
|
103
|
-
error.should be_a(RSolr::Error::SolrContext)
|
104
|
-
error.should respond_to(:request)
|
105
|
-
error.request.keys.should include(:connection, :method, :uri, :data, :headers, :params)
|
106
|
-
}
|
107
|
-
end
|
108
|
-
it "should raise an Http error if the response status code aint right" do
|
109
|
-
client.connection.should_receive(:get).
|
110
|
-
and_return({:status_code => 404})
|
111
|
-
lambda{
|
112
|
-
client.send_request :get, '', {}, nil, {}
|
113
|
-
}.should raise_error(RSolr::Error::Http) {|error|
|
114
|
-
error.should be_a(RSolr::Error::Http)
|
115
|
-
error.should respond_to(:request)
|
116
|
-
error.should respond_to(:response)
|
117
|
-
}
|
118
|
-
end
|
119
|
-
end
|
120
|
-
|
121
|
-
context "post" do
|
122
|
-
include ClientHelper
|
123
|
-
it "should pass the expected params to the connection's #post method" do
|
124
|
-
client.connection.should_receive(:post).
|
125
|
-
with("update?wt=ruby", "the data", {"Content-Type" => "text/plain"}).
|
126
|
-
and_return(:status => 200)
|
127
|
-
client.post "update", "the data", nil, {"Content-Type" => "text/plain"}
|
128
|
-
end
|
129
|
-
end
|
130
|
-
|
131
|
-
context "xml" do
|
132
|
-
include ClientHelper
|
133
|
-
it "should return an instance of RSolr::Xml::Generator" do
|
134
|
-
client.xml.should be_a RSolr::Xml::Generator
|
135
|
-
end
|
136
|
-
end
|
137
|
-
|
138
|
-
context "add" do
|
139
|
-
include ClientHelper
|
140
|
-
it "should send xml to the connection's #post method" do
|
141
|
-
client.connection.should_receive(:post).
|
142
|
-
with("update?wt=ruby", "<xml/>", {"Content-Type"=>"text/xml"}).
|
143
|
-
and_return(:status => 200)
|
144
|
-
# the :xml attr is lazy loaded... so load it up first
|
145
|
-
client.xml
|
146
|
-
client.xml.should_receive(:add).
|
147
|
-
with({:id=>1}, :commitWith=>1.0).
|
148
|
-
and_return("<xml/>")
|
149
|
-
client.add({:id=>1}, {:commitWith=>1.0})
|
150
|
-
end
|
151
|
-
end
|
152
|
-
|
153
|
-
context "update" do
|
154
|
-
include ClientHelper
|
155
|
-
it "should send data to the connection's #post method" do
|
156
|
-
client.connection.should_receive(:post).
|
157
|
-
with("update?wt=xml", instance_of(String), {"Content-Type"=>"text/xml"}).
|
158
|
-
and_return(:status => 200)
|
159
|
-
client.update("<optimize/>", {:wt=>:xml})
|
160
|
-
end
|
161
|
-
end
|
162
|
-
|
163
|
-
context "post based helper methods:" do
|
164
|
-
include ClientHelper
|
165
|
-
[:commit, :optimize, :rollback].each do |meth|
|
166
|
-
it "should send a #{meth} message to the connection's #post method" do
|
167
|
-
client.connection.should_receive(:post).
|
168
|
-
with("update?wt=ruby", "<?xml version=\"1.0\" encoding=\"UTF-8\"?><#{meth}/>", {"Content-Type"=>"text/xml"}).
|
169
|
-
and_return(:status => 200)
|
170
|
-
client.send meth
|
171
|
-
end
|
172
|
-
end
|
173
|
-
end
|
174
|
-
|
175
|
-
context "delete_by_id" do
|
176
|
-
include ClientHelper
|
177
|
-
it "should send data to the connection's #post method" do
|
178
|
-
client.connection.should_receive(:post).
|
179
|
-
with("update?wt=ruby", instance_of(String), {"Content-Type"=>"text/xml"}).
|
180
|
-
and_return(:status => 200)
|
181
|
-
client.delete_by_id 1
|
182
|
-
end
|
183
|
-
end
|
184
|
-
|
185
|
-
context "delete_by_query" do
|
186
|
-
include ClientHelper
|
187
|
-
it "should send data to the connection's #post method" do
|
188
|
-
client.connection.should_receive(:post).
|
189
|
-
with("update?wt=ruby", instance_of(String), {"Content-Type"=>"text/xml"}).
|
190
|
-
and_return(:status => 200)
|
191
|
-
client.delete_by_query :fq => "category:\"trash\""
|
192
|
-
end
|
193
|
-
end
|
194
|
-
|
195
|
-
end
|
data/spec/api/rsolr_http_spec.rb
DELETED
data/spec/api/rsolr_spec.rb
DELETED
@@ -1,17 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
describe "RSolr class methods" do
|
3
|
-
|
4
|
-
it "should parse these here options" do
|
5
|
-
result = RSolr.parse_options "http://localhost:8983/solr/blah", :proxy => "http://qtpaglzvm.com"
|
6
|
-
result[0].should be_a(URI)
|
7
|
-
result[1].should be_a(Hash)
|
8
|
-
result[1][:proxy].should be_a(URI)
|
9
|
-
end
|
10
|
-
|
11
|
-
it "should not create a URI instance for :proxy => nil" do
|
12
|
-
result = RSolr.parse_options "http://localhost:8983/solr/blah"
|
13
|
-
result[0].should be_a(URI)
|
14
|
-
result[1].should == {:proxy => nil}
|
15
|
-
end
|
16
|
-
|
17
|
-
end
|