mwmitchell-rsolr 0.8.3 → 0.8.4
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/CHANGES.txt +4 -0
- data/README.rdoc +17 -17
- data/Rakefile +16 -9
- data/lib/rsolr.rb +1 -1
- data/spec/connection_spec.rb +151 -0
- data/spec/helper.rb +4 -0
- data/spec/rsolr_spec.rb +29 -0
- metadata +5 -2
data/CHANGES.txt
CHANGED
data/README.rdoc
CHANGED
@@ -41,7 +41,7 @@ To get a direct connection (no http) in jRuby using DirectSolrConnection:
|
|
41
41
|
:adapter=>:direct,
|
42
42
|
:home_dir=>'/path/to/solr/home',
|
43
43
|
:dist_dir=>'/path/to/solr/distribution'
|
44
|
-
)
|
44
|
+
})
|
45
45
|
|
46
46
|
== Requests
|
47
47
|
Once you have a connection, you can execute queries, updates etc..
|
@@ -50,29 +50,29 @@ Once you have a connection, you can execute queries, updates etc..
|
|
50
50
|
Use the #select method to send requests to the /select handler:
|
51
51
|
response = solr.select({
|
52
52
|
:q=>'washington',
|
53
|
-
:facet=>true,
|
54
|
-
'facet.limit'=>-1,
|
55
|
-
'facet.field'=>'cat',
|
56
|
-
'facet.field'=>'inStock',
|
57
53
|
:start=>0,
|
58
54
|
:rows=>10
|
59
55
|
})
|
56
|
+
|
57
|
+
Use the #send_request method to set a custom request handler path:
|
58
|
+
response = solr.send_request('/documents', {:q=>'test'})
|
60
59
|
|
61
60
|
|
62
61
|
=== Updating Solr
|
63
|
-
Updating
|
62
|
+
Updating can be done using native Ruby structures. Hashes are used for single documents and arrays are used for a collection of documents (hashes). These structures get turned into simple XML "messages". Raw XML can also be used of course.
|
64
63
|
|
65
|
-
Raw XML
|
66
|
-
|
64
|
+
Raw XML via #update
|
65
|
+
solr.update('</commit>')
|
66
|
+
solr.update('</optimize>')
|
67
67
|
|
68
|
-
Single document
|
69
|
-
|
68
|
+
Single document via #add
|
69
|
+
solr.add(:id=>1, :price=>1.00)
|
70
70
|
|
71
|
-
Multiple documents
|
71
|
+
Multiple documents via #add
|
72
72
|
documents = [{:id=>1, :price=>1.00}, {:id=>2, :price=>10.50}]
|
73
|
-
|
73
|
+
solr.add(documents)
|
74
74
|
|
75
|
-
When adding, you can also supply "add" xml element attributes and/or a block for manipulating other "add" related elements:
|
75
|
+
When adding, you can also supply "add" xml element attributes and/or a block for manipulating other "add" related elements (docs and fields) when using the #add method:
|
76
76
|
|
77
77
|
doc = {:id=>1, :price=>1.00}
|
78
78
|
add_attributes = {:allowDups=>false, :commitWithin=>10.0}
|
@@ -84,14 +84,14 @@ When adding, you can also supply "add" xml element attributes and/or a block for
|
|
84
84
|
end
|
85
85
|
|
86
86
|
Delete by id
|
87
|
-
|
87
|
+
solr.delete_by_id(1)
|
88
88
|
or an array of ids
|
89
|
-
|
89
|
+
solr.delete_by_id([1, 2, 3, 4])
|
90
90
|
|
91
91
|
Delete by query:
|
92
|
-
|
92
|
+
solr.delete_by_query('price:1.00')
|
93
93
|
Delete by array of queries
|
94
|
-
|
94
|
+
solr.delete_by_query(['price:1.00', 'price:10.00'])
|
95
95
|
|
96
96
|
|
97
97
|
Commit & optimize shortcuts
|
data/Rakefile
CHANGED
@@ -21,18 +21,25 @@ Rake::TestTask.new("test_units") { |t|
|
|
21
21
|
t.libs << "test"
|
22
22
|
}
|
23
23
|
|
24
|
+
require 'spec/rake/spectask'
|
24
25
|
|
25
|
-
desc
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
files = FileList["**/*_spec.rb"]
|
30
|
-
p files.to_a
|
31
|
-
files.each do |filename|
|
32
|
-
system "cd #{File.dirname(filename)} && ruby #{File.basename(filename)}"
|
33
|
-
end
|
26
|
+
desc "Run specs"
|
27
|
+
Spec::Rake::SpecTask.new('spec') do |t|
|
28
|
+
t.spec_files = FileList['spec/**/*_spec.rb']
|
29
|
+
t.libs += ["lib", "spec"]
|
34
30
|
end
|
35
31
|
|
32
|
+
#desc 'Run specs' # this task runs each test in its own process
|
33
|
+
#task :specs do
|
34
|
+
# require 'rubygems'
|
35
|
+
# require 'facets/more/filelist' unless defined?(FileList)
|
36
|
+
# files = FileList["**/*_spec.rb"]
|
37
|
+
# p files.to_a
|
38
|
+
# files.each do |filename|
|
39
|
+
# system "cd #{File.dirname(filename)} && ruby #{File.basename(filename)}"
|
40
|
+
# end
|
41
|
+
#end
|
42
|
+
|
36
43
|
#desc "Run specs"
|
37
44
|
#Rake::TestTask.new("specs") { |t|
|
38
45
|
# t.pattern = 'spec/**/*_spec.rb'
|
data/lib/rsolr.rb
CHANGED
@@ -0,0 +1,151 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
describe RSolr::Connection do
|
4
|
+
|
5
|
+
context 'the initialize method' do
|
6
|
+
|
7
|
+
it 'should require one argument' do
|
8
|
+
lambda{RSolr::Connection.new}.should raise_error(ArgumentError)
|
9
|
+
end
|
10
|
+
|
11
|
+
end
|
12
|
+
|
13
|
+
before(:each) do
|
14
|
+
@adapter = mock('RSolr::Adapter::HTTP')
|
15
|
+
@connection = RSolr::Connection.new(@adapter)
|
16
|
+
end
|
17
|
+
|
18
|
+
context '#map_params method' do
|
19
|
+
it 'should merge :wt=>:ruby to the incoming params' do
|
20
|
+
result = @connection.send(:map_params, {})
|
21
|
+
result[:wt].should == :ruby
|
22
|
+
end
|
23
|
+
it 'should not overwrite an existing :wt param' do
|
24
|
+
result = @connection.send(:map_params, {:wt=>'xml'})
|
25
|
+
result[:wt].should == 'xml'
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
context '#adapt_response method' do
|
30
|
+
it 'should evaluate the :body value if the :wt param IS :ruby' do
|
31
|
+
response_from_adapter = {:body=>'{}', :params=>{:wt=>:ruby}}
|
32
|
+
result = @connection.send(:adapt_response, response_from_adapter)
|
33
|
+
result.should be_a(Hash)
|
34
|
+
end
|
35
|
+
it 'should not evaluate the :body value if the :wt is NOT :ruby' do
|
36
|
+
response_from_adapter = {:body=>'</xml>', :params=>{:wt=>:xml}}
|
37
|
+
result = @connection.send(:adapt_response, response_from_adapter)
|
38
|
+
result.should be_a(String)
|
39
|
+
end
|
40
|
+
it 'should return an object that will respond_to?(:adapter_response)' do
|
41
|
+
response_from_adapter = {:body=>'</xml>', :params=>{:wt=>:xml}}
|
42
|
+
result = @connection.send(:adapt_response, response_from_adapter)
|
43
|
+
result.should respond_to(:adapter_response)
|
44
|
+
end
|
45
|
+
it 'should return the original adapter response from #adapter_response method' do
|
46
|
+
response_from_adapter = {:body=>'</xml>', :params=>{:wt=>:xml}}
|
47
|
+
result = @connection.send(:adapt_response, response_from_adapter)
|
48
|
+
result.adapter_response.should == response_from_adapter
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
it 'should have an adapter' do
|
53
|
+
@connection.adapter.should == @adapter
|
54
|
+
end
|
55
|
+
|
56
|
+
it 'should send requests to the adapter' do
|
57
|
+
params = {:wt=>:ruby, :q=>'test'}
|
58
|
+
expected_return = {:params=>params, :body=>'{}'}
|
59
|
+
@adapter.should_receive(:send_request).with(
|
60
|
+
'/documents',
|
61
|
+
params,
|
62
|
+
nil
|
63
|
+
).once.and_return(expected_return)
|
64
|
+
@connection.send_request('/documents', :q=>'test')
|
65
|
+
end
|
66
|
+
|
67
|
+
context '#select method' do
|
68
|
+
|
69
|
+
it 'should set the solr request path to /select' do
|
70
|
+
params = {:wt=>:ruby, :q=>'test'}
|
71
|
+
expected_return = {:params=>params, :body=>'{}'}
|
72
|
+
@adapter.should_receive(:send_request).with(
|
73
|
+
'/select',
|
74
|
+
params,
|
75
|
+
nil
|
76
|
+
).once.and_return(expected_return)
|
77
|
+
@connection.select(:q=>'test')
|
78
|
+
end
|
79
|
+
|
80
|
+
it 'should add a :qt=>:ruby to the params, then pass the params to the adapter' do
|
81
|
+
input_params = {:q=>'test', :fq=>'filter:one', :fq=>'documents'}
|
82
|
+
expected_modified_params = input_params.merge({:wt=>:ruby})
|
83
|
+
expected_return = {:body=>'{}', :params=>expected_modified_params}
|
84
|
+
@adapter.should_receive(:send_request).with(
|
85
|
+
'/select',
|
86
|
+
hash_including(expected_modified_params),
|
87
|
+
nil
|
88
|
+
).once.and_return(expected_return)
|
89
|
+
@connection.select(input_params)
|
90
|
+
end
|
91
|
+
|
92
|
+
it 'should return a hash' do
|
93
|
+
@adapter.should_receive(:send_request).and_return(
|
94
|
+
{:body=>'{}', :params=>{:wt=>:ruby}}
|
95
|
+
)
|
96
|
+
@connection.select(:q=>'test').should be_a(Hash)
|
97
|
+
end
|
98
|
+
|
99
|
+
end
|
100
|
+
|
101
|
+
context '#update method' do
|
102
|
+
|
103
|
+
it 'should set the solr request path to /update' do
|
104
|
+
expected_params = {:name=>'test', :wt=>:ruby}
|
105
|
+
@adapter.should_receive(:send_request).with(
|
106
|
+
'/update',
|
107
|
+
hash_including(expected_params),
|
108
|
+
'</optimize>'
|
109
|
+
).once.and_return(
|
110
|
+
{:body=>'{}', :params=>expected_params}
|
111
|
+
)
|
112
|
+
@connection.update('</optimize>', :name=>'test')
|
113
|
+
end
|
114
|
+
|
115
|
+
it 'should accept a solr params hash' do
|
116
|
+
@adapter.should_receive(:send_request).with(
|
117
|
+
'/update',
|
118
|
+
hash_including(:xyz=>123, :wt=>:ruby),
|
119
|
+
'</optimize>'
|
120
|
+
).once.and_return(
|
121
|
+
{:body=>'{}', :params=>{:xyz=>123, :wt=>:ruby}}
|
122
|
+
)
|
123
|
+
@connection.update('</optimize>', :xyz=>123)
|
124
|
+
end
|
125
|
+
|
126
|
+
end
|
127
|
+
|
128
|
+
context '#send_request method' do
|
129
|
+
|
130
|
+
it 'should send the request path to the adapter' do
|
131
|
+
@adapter.should_receive(:send_request).with(
|
132
|
+
'/documents',
|
133
|
+
hash_including(:q=>'test', :wt=>:ruby),
|
134
|
+
nil
|
135
|
+
).once.and_return({:body=>'{}', :params=>{:wt=>:ruby, :q=>'test'}})
|
136
|
+
@connection.send_request('/documents', :q=>'test')
|
137
|
+
end
|
138
|
+
|
139
|
+
it 'should return an object will respond_to :adapter_response' do
|
140
|
+
@adapter.should_receive(:send_request).with(
|
141
|
+
'/select',
|
142
|
+
hash_including(:q=>'test', :wt=>:ruby),
|
143
|
+
nil
|
144
|
+
).once.and_return({:body=>'{}', :params=>{:q=>'test', :wt=>:ruby}})
|
145
|
+
response = @connection.select(:q=>'test')
|
146
|
+
response.should respond_to(:adapter_response)
|
147
|
+
end
|
148
|
+
|
149
|
+
end
|
150
|
+
|
151
|
+
end
|
data/spec/helper.rb
ADDED
data/spec/rsolr_spec.rb
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
describe RSolr::Connection do
|
4
|
+
|
5
|
+
context 'the #connect method' do
|
6
|
+
|
7
|
+
it 'should exist' do
|
8
|
+
RSolr.should respond_to(:connect)
|
9
|
+
end
|
10
|
+
|
11
|
+
it 'should return an RSolr::Connection object' do
|
12
|
+
RSolr.connect.should be_a(RSolr::Connection)
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
|
17
|
+
context "the #escape method" do
|
18
|
+
|
19
|
+
it "should exist" do
|
20
|
+
RSolr.should respond_to(:escape)
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should escape properly" do
|
24
|
+
RSolr.escape('Trying & % different "characters" here!').should == "Trying\\ \\&\\ \\%\\ different\\ \\\"characters\\\"\\ here\\!"
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mwmitchell-rsolr
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.
|
4
|
+
version: 0.8.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matt Mitchell
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-03
|
12
|
+
date: 2009-04-03 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -91,3 +91,6 @@ test_files:
|
|
91
91
|
- test/message_test.rb
|
92
92
|
- test/rsolr_test
|
93
93
|
- test/test_helpers.rb
|
94
|
+
- spec/connection_spec.rb
|
95
|
+
- spec/helper.rb
|
96
|
+
- spec/rsolr_spec.rb
|