mwmitchell-rsolr 0.7.1 → 0.8.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES.txt +9 -0
- data/README.rdoc +28 -43
- data/Rakefile +1 -2
- data/examples/direct.rb +8 -9
- data/examples/http.rb +9 -8
- data/lib/rsolr.rb +10 -14
- data/lib/rsolr/adapter.rb +6 -0
- data/lib/rsolr/{connection/adapter → adapter}/direct.rb +3 -4
- data/lib/rsolr/{connection/adapter → adapter}/http.rb +4 -11
- data/lib/rsolr/connection.rb +104 -3
- data/lib/rsolr/http_client.rb +28 -14
- data/lib/rsolr/http_client/adapter/net_http.rb +1 -1
- data/lib/rsolr/message.rb +5 -6
- data/test/connection/direct_test.rb +19 -20
- data/test/connection/http_test.rb +3 -4
- data/test/connection/test_methods.rb +40 -50
- data/test/http_client/curb_test.rb +3 -4
- data/test/http_client/net_http_test.rb +3 -4
- data/test/http_client/test_methods.rb +1 -1
- data/test/http_client/util_test.rb +1 -1
- data/test/message_test.rb +8 -7
- metadata +6 -20
- data/lib/rsolr/connection/adapter.rb +0 -7
- data/lib/rsolr/connection/adapter/common_methods.rb +0 -50
- data/lib/rsolr/connection/base.rb +0 -101
- data/lib/rsolr/query.rb +0 -58
- data/lib/rsolr/response.rb +0 -8
- data/lib/rsolr/response/base.rb +0 -25
- data/lib/rsolr/response/index_info.rb +0 -33
- data/lib/rsolr/response/query.rb +0 -163
- data/lib/rsolr/response/update.rb +0 -4
- data/test/query_helper_test.rb +0 -30
- data/test/response/base_test.rb +0 -38
- data/test/response/pagination_test.rb +0 -47
- data/test/response/query_test.rb +0 -44
- data/test/test_helpers.rb +0 -61
data/lib/rsolr/message.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
|
2
1
|
# http://builder.rubyforge.org/
|
3
2
|
require 'rubygems'
|
4
3
|
require 'builder'
|
@@ -10,13 +9,13 @@ class RSolr::Message
|
|
10
9
|
class << self
|
11
10
|
|
12
11
|
def xml
|
13
|
-
Builder::XmlMarkup.new
|
12
|
+
::Builder::XmlMarkup.new
|
14
13
|
end
|
15
14
|
|
16
15
|
# add({})
|
17
16
|
# add([{}, {}])
|
18
17
|
# add(docs) do |doc|
|
19
|
-
# doc
|
18
|
+
# doc[:boost] = 10.0
|
20
19
|
# end
|
21
20
|
def add(data, opts={}, &block)
|
22
21
|
data = [data] if data.respond_to?(:each_pair) # if it's a hash, put it in an array
|
@@ -25,11 +24,11 @@ class RSolr::Message
|
|
25
24
|
add_xml.doc do |doc_xml|
|
26
25
|
# convert keys into strings and perform an alpha sort (easier testing between ruby and jruby)
|
27
26
|
# but probably not great for performance? whatever...
|
28
|
-
sorted_items = item.inject({}) {|acc,(k,v)| acc.merge({k.to_s=>v})}
|
29
|
-
|
27
|
+
#sorted_items = item.inject({}) {|acc,(k,v)| acc.merge({k.to_s=>v})}
|
28
|
+
item.keys.each do |k|
|
30
29
|
doc_attrs = {:name=>k}
|
31
30
|
yield item, doc_attrs if block_given?
|
32
|
-
[
|
31
|
+
[item[k]].flatten.each do |v| # multiValued attributes
|
33
32
|
doc_xml.field(v, doc_attrs)
|
34
33
|
end
|
35
34
|
end
|
@@ -1,26 +1,25 @@
|
|
1
1
|
if defined?(JRUBY_VERSION)
|
2
|
-
|
3
|
-
require File.join(File.dirname(__FILE__), '..', 'test_helpers')
|
4
|
-
|
5
|
-
require File.join(File.dirname(__FILE__), 'test_methods')
|
6
|
-
|
7
|
-
class ConnectionDirectTest < RSolrBaseTest
|
8
2
|
|
9
|
-
|
3
|
+
require 'helper'
|
4
|
+
require 'connection/test_methods'
|
10
5
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
6
|
+
class ConnectionDirectTest < RSolrBaseTest
|
7
|
+
|
8
|
+
include ConnectionTestMethods
|
9
|
+
|
10
|
+
def setup
|
11
|
+
base = File.expand_path( File.dirname(__FILE__) )
|
12
|
+
dist = File.join(base, '..', '..', 'apache-solr')
|
13
|
+
home = File.join(dist, 'example', 'solr')
|
14
|
+
@solr = RSolr.connect({:adapter=>:direct}, {:home_dir=>home, :dist_dir=>dist})
|
15
|
+
@solr.delete_by_query('*:*')
|
16
|
+
@solr.commit
|
17
|
+
end
|
18
|
+
|
19
|
+
def teardown
|
20
|
+
@solr.adapter.close
|
21
|
+
end
|
22
|
+
|
18
23
|
end
|
19
24
|
|
20
|
-
def teardown
|
21
|
-
@solr.adapter.close
|
22
|
-
end
|
23
|
-
|
24
|
-
end
|
25
|
-
|
26
25
|
end
|
@@ -1,9 +1,8 @@
|
|
1
1
|
unless defined?(JRUBY_VERSION)
|
2
|
-
|
3
|
-
require File.join(File.dirname(__FILE__), '..', 'test_helpers')
|
4
2
|
|
5
|
-
require
|
6
|
-
|
3
|
+
require 'helper'
|
4
|
+
require 'connection/test_methods'
|
5
|
+
|
7
6
|
class AdapterHTTPTest < RSolrBaseTest
|
8
7
|
|
9
8
|
include ConnectionTestMethods
|
@@ -9,99 +9,89 @@ module ConnectionTestMethods
|
|
9
9
|
#def teardown
|
10
10
|
# @solr.delete_by_query('id:[* TO *]')
|
11
11
|
# @solr.commit
|
12
|
-
# assert_equal 0, @solr.
|
12
|
+
# assert_equal 0, @solr.select(:q=>'*:*').docs.size
|
13
13
|
#end
|
14
14
|
|
15
|
-
#
|
16
|
-
def test_set_connection_options
|
17
|
-
solr = RSolr.connect(:default_wt=>:json)
|
18
|
-
assert_equal :json, solr.opts[:default_wt]
|
19
|
-
end
|
20
|
-
|
21
|
-
# If :wt is NOT :ruby, the format doesn't get wrapped in a Solr::Response class
|
15
|
+
# If :wt is NOT :ruby, the format doesn't get converted into a Mash (special Hash; see lib/mash.rb)
|
22
16
|
# Raw ruby can be returned by using :wt=>'ruby', not :ruby
|
23
17
|
def test_raw_response_formats
|
24
|
-
ruby_response = @solr.
|
25
|
-
assert ruby_response
|
26
|
-
assert ruby_response
|
18
|
+
ruby_response = @solr.select(:q=>'*:*', :wt=>'ruby')
|
19
|
+
assert ruby_response.is_a?(String)
|
20
|
+
assert ruby_response =~ %r('wt'=>'ruby')
|
27
21
|
# xml?
|
28
|
-
xml_response = @solr.
|
29
|
-
assert xml_response
|
22
|
+
xml_response = @solr.select(:q=>'*:*', :wt=>'xml')
|
23
|
+
assert xml_response.is_a?(String)
|
24
|
+
assert xml_response =~ %r(<str name="wt">xml</str>)
|
30
25
|
# json?
|
31
|
-
json_response = @solr.
|
32
|
-
assert json_response
|
26
|
+
json_response = @solr.select(:q=>'*:*', :wt=>'json')
|
27
|
+
assert json_response.is_a?(String)
|
28
|
+
assert json_response =~ %r("wt":"json")
|
33
29
|
end
|
34
30
|
|
35
|
-
def
|
36
|
-
r = @solr.query(:q=>'*:*')
|
37
|
-
assert r.is_a?(RSolr::Response::Query::Base)
|
38
|
-
# catch exceptions for bad queries
|
31
|
+
def test_raise_on_invalid_query
|
39
32
|
assert_raise RSolr::RequestError do
|
40
|
-
@solr.
|
33
|
+
@solr.select(:q=>'!')
|
41
34
|
end
|
42
35
|
end
|
43
36
|
|
44
|
-
def
|
37
|
+
def test_select_response_docs
|
45
38
|
@solr.add(:id=>1, :price=>1.00, :cat=>['electronics', 'something else'])
|
46
39
|
@solr.commit
|
47
|
-
r = @solr.
|
48
|
-
assert r.is_a?(
|
49
|
-
assert_equal Array, r.docs.class
|
50
|
-
first = r.docs.first
|
40
|
+
r = @solr.select(:q=>'*:*')
|
41
|
+
assert r.is_a?(Mash)
|
51
42
|
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
assert first.has?('cat', 'electronics')
|
56
|
-
assert first.has?('cat', 'something else')
|
57
|
-
assert first.has?(:cat, 'something else')
|
43
|
+
docs = r[:response][:docs]
|
44
|
+
assert_equal Array, docs.class
|
45
|
+
first = docs.first
|
58
46
|
|
59
|
-
|
47
|
+
# test the has? method
|
48
|
+
assert_equal 1.00, first[:price]
|
60
49
|
|
61
|
-
|
62
|
-
assert first.
|
50
|
+
assert_equal Array, first[:cat].class
|
51
|
+
assert first[:cat].include?('electronics')
|
52
|
+
assert first[:cat].include?('something else')
|
53
|
+
assert first[:cat].include?('something else')
|
63
54
|
|
64
|
-
assert false == first.has?('cat', /zxcv/)
|
65
55
|
end
|
66
56
|
|
67
57
|
def test_add
|
68
|
-
assert_equal 0, @solr.
|
58
|
+
assert_equal 0, @solr.select(:q=>'*:*')[:response][:numFound]
|
69
59
|
update_response = @solr.add(:id=>100)
|
70
|
-
assert update_response.is_a?(
|
60
|
+
assert update_response.is_a?(Mash)
|
71
61
|
#
|
72
62
|
@solr.commit
|
73
|
-
assert_equal 1, @solr.
|
63
|
+
assert_equal 1, @solr.select(:q=>'*:*')[:response][:numFound]
|
74
64
|
end
|
75
65
|
|
76
66
|
def test_delete_by_id
|
77
67
|
@solr.add(:id=>100)
|
78
68
|
@solr.commit
|
79
|
-
total = @solr.
|
69
|
+
total = @solr.select(:q=>'*:*')[:response][:numFound]
|
80
70
|
assert_equal 1, total
|
81
71
|
delete_response = @solr.delete_by_id(100)
|
82
72
|
@solr.commit
|
83
|
-
assert delete_response.is_a?(
|
84
|
-
total = @solr.
|
73
|
+
assert delete_response.is_a?(Mash)
|
74
|
+
total = @solr.select(:q=>'*:*')[:response][:numFound]
|
85
75
|
assert_equal 0, total
|
86
76
|
end
|
87
77
|
|
88
78
|
def test_delete_by_query
|
89
79
|
@solr.add(:id=>1, :name=>'BLAH BLAH BLAH')
|
90
80
|
@solr.commit
|
91
|
-
assert_equal 1, @solr.
|
81
|
+
assert_equal 1, @solr.select(:q=>'*:*')[:response][:numFound]
|
92
82
|
response = @solr.delete_by_query('name:BLAH BLAH BLAH')
|
93
83
|
@solr.commit
|
94
|
-
assert response.is_a?(
|
95
|
-
assert_equal 0, @solr.
|
84
|
+
assert response.is_a?(Mash)
|
85
|
+
assert_equal 0, @solr.select(:q=>'*:*')[:response][:numFound]
|
96
86
|
end
|
97
87
|
|
98
|
-
def
|
99
|
-
response = @solr.
|
100
|
-
assert response.is_a?(
|
88
|
+
def test_admin_luke_index_info
|
89
|
+
response = @solr.send_request('/admin/luke', :numTerms=>0)
|
90
|
+
assert response.is_a?(Mash)
|
101
91
|
# make sure the ? methods are true/false
|
102
|
-
assert [true, false].include?(response
|
103
|
-
assert [true, false].include?(response
|
104
|
-
assert [true, false].include?(response
|
92
|
+
assert [true, false].include?(response[:index][:current])
|
93
|
+
assert [true, false].include?(response[:index][:optimized])
|
94
|
+
assert [true, false].include?(response[:index][:hasDeletions])
|
105
95
|
end
|
106
96
|
|
107
97
|
end
|
@@ -2,14 +2,13 @@
|
|
2
2
|
# the curb gem is a c extension based gem, jruby has no support for this
|
3
3
|
unless defined?(JRUBY_VERSION)
|
4
4
|
|
5
|
-
require
|
6
|
-
|
7
|
-
require File.join(File.dirname(__FILE__), 'test_methods')
|
5
|
+
require 'helper'
|
6
|
+
require 'http_client/test_methods'
|
8
7
|
|
9
8
|
class CurbTest < RSolrBaseTest
|
10
9
|
|
11
10
|
def setup
|
12
|
-
@c ||= RSolr::HTTPClient.
|
11
|
+
@c ||= RSolr::HTTPClient::Connector.new(:curb).connect(URL)
|
13
12
|
end
|
14
13
|
|
15
14
|
include HTTPClientTestMethods
|
@@ -1,11 +1,10 @@
|
|
1
|
-
require
|
2
|
-
|
3
|
-
require File.join(File.dirname(__FILE__), 'test_methods')
|
1
|
+
require 'helper'
|
2
|
+
require 'http_client/test_methods'
|
4
3
|
|
5
4
|
class NetHTTPTest < RSolrBaseTest
|
6
5
|
|
7
6
|
def setup
|
8
|
-
@c ||= RSolr::HTTPClient.
|
7
|
+
@c ||= RSolr::HTTPClient::Connector.new(:net_http).connect(URL)
|
9
8
|
end
|
10
9
|
|
11
10
|
include HTTPClientTestMethods
|
data/test/message_test.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
|
-
|
1
|
+
|
2
|
+
require 'helper'
|
2
3
|
|
3
4
|
class MessageTest < RSolrBaseTest
|
4
5
|
|
@@ -52,9 +53,8 @@ class MessageTest < RSolrBaseTest
|
|
52
53
|
:id=>1,
|
53
54
|
:name=>'matt'
|
54
55
|
}
|
55
|
-
|
56
|
-
|
57
|
-
assert_equal expected, RSolr::Message.add(data).to_s
|
56
|
+
assert RSolr::Message.add(data).to_s =~ /<field name="name">matt<\/field>/
|
57
|
+
assert RSolr::Message.add(data).to_s =~ /<field name="id">1<\/field>/
|
58
58
|
end
|
59
59
|
|
60
60
|
# add an array of hashes
|
@@ -73,7 +73,8 @@ class MessageTest < RSolrBaseTest
|
|
73
73
|
message = RSolr::Message.add(data)
|
74
74
|
expected = '<add><doc><field name="id">1</field><field name="name">matt</field></doc><doc><field name="id">2</field><field name="name">sam</field></doc></add>'
|
75
75
|
|
76
|
-
|
76
|
+
assert message.to_s=~/<field name="name">matt<\/field>/
|
77
|
+
assert message.to_s=~/<field name="name">sam<\/field>/
|
77
78
|
end
|
78
79
|
|
79
80
|
# multiValue field support test, thanks to Fouad Mardini!
|
@@ -82,8 +83,8 @@ class MessageTest < RSolrBaseTest
|
|
82
83
|
:id => 1,
|
83
84
|
:name => ['matt1', 'matt2']
|
84
85
|
}
|
85
|
-
|
86
|
-
|
86
|
+
assert RSolr::Message.add(data).to_s =~ /<field name="name">matt1<\/field>/
|
87
|
+
assert RSolr::Message.add(data).to_s =~ /<field name="name">matt2<\/field>/
|
87
88
|
end
|
88
89
|
|
89
90
|
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.
|
4
|
+
version: 0.8.0
|
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-
|
12
|
+
date: 2009-03-11 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -39,24 +39,16 @@ files:
|
|
39
39
|
- lib/core_ext.rb
|
40
40
|
- lib/mash.rb
|
41
41
|
- lib/rsolr.rb
|
42
|
-
- lib/rsolr/
|
43
|
-
- lib/rsolr/
|
44
|
-
- lib/rsolr/
|
45
|
-
- lib/rsolr/
|
46
|
-
- lib/rsolr/connection/base.rb
|
42
|
+
- lib/rsolr/adapter/common_methods.rb
|
43
|
+
- lib/rsolr/adapter/direct.rb
|
44
|
+
- lib/rsolr/adapter/http.rb
|
45
|
+
- lib/rsolr/adapter.rb
|
47
46
|
- lib/rsolr/connection.rb
|
48
47
|
- lib/rsolr/http_client/adapter/curb.rb
|
49
48
|
- lib/rsolr/http_client/adapter/net_http.rb
|
50
49
|
- lib/rsolr/http_client/adapter.rb
|
51
50
|
- lib/rsolr/http_client.rb
|
52
|
-
- lib/rsolr/indexer.rb
|
53
51
|
- lib/rsolr/message.rb
|
54
|
-
- lib/rsolr/response/base.rb
|
55
|
-
- lib/rsolr/response/index_info.rb
|
56
|
-
- lib/rsolr/response/query.rb
|
57
|
-
- lib/rsolr/response/update.rb
|
58
|
-
- lib/rsolr/response.rb
|
59
|
-
- lib/rsolr/query.rb
|
60
52
|
- LICENSE
|
61
53
|
- Rakefile
|
62
54
|
- README.rdoc
|
@@ -96,12 +88,6 @@ test_files:
|
|
96
88
|
- test/http_client/net_http_test.rb
|
97
89
|
- test/http_client/test_methods.rb
|
98
90
|
- test/http_client/util_test.rb
|
99
|
-
- test/indexer.rb
|
100
91
|
- test/message_test.rb
|
101
|
-
- test/query_helper_test.rb
|
102
|
-
- test/response/base_test.rb
|
103
|
-
- test/response/pagination_test.rb
|
104
|
-
- test/response/query_test.rb
|
105
92
|
- test/rsolr_test
|
106
|
-
- test/ruby-lang.org.rss.xml
|
107
93
|
- test/test_helpers.rb
|
@@ -1,50 +0,0 @@
|
|
1
|
-
# This module is for HTTP + DirectSolrConnection (jruby) connections
|
2
|
-
# It provides common methods.
|
3
|
-
# The main query, update and index_info methods are here
|
4
|
-
# The classes that include this module only need to provide a request method like:
|
5
|
-
# send_request(request_path, params, data)
|
6
|
-
# where:
|
7
|
-
# request_path is a string to a handler (/select etc.)
|
8
|
-
# params is a hash for query string params
|
9
|
-
# data is optional string of xml
|
10
|
-
module RSolr::Connection::Adapter::CommonMethods
|
11
|
-
|
12
|
-
# send a request to the "select" handler
|
13
|
-
# the first argument is the select handler path
|
14
|
-
# the last argument is a hash of params
|
15
|
-
def query(*args)
|
16
|
-
params = args.extract_options!
|
17
|
-
path = args.first || @opts[:select_path]
|
18
|
-
self.send_request "/#{path}", params
|
19
|
-
end
|
20
|
-
|
21
|
-
# sends a request to the admin luke handler to get info on the index
|
22
|
-
# the first argument is the admin/luke request handler path
|
23
|
-
# the last argument is a hash of params
|
24
|
-
def index_info(*args)
|
25
|
-
params = args.extract_options!
|
26
|
-
path = args.first || @opts[:luke_path]
|
27
|
-
params[:numTerms]||=0
|
28
|
-
self.send_request "/#{path}", params
|
29
|
-
end
|
30
|
-
|
31
|
-
# sends data to the update handler
|
32
|
-
# If 2 arguments are passed in:
|
33
|
-
# - the first should be the POST data string
|
34
|
-
# - the second can be an optional url params hash
|
35
|
-
# - the path is defaulted to '/update'
|
36
|
-
# If 3 arguments are passed in:
|
37
|
-
# - the first argument should be the url path ('/my-update-handler' etc.)
|
38
|
-
# - the second should be the POST data string
|
39
|
-
# - the last/third should be an optional url params hash
|
40
|
-
# data can be:
|
41
|
-
# string (valid solr update xml)
|
42
|
-
# object with respond_to?(:to_xml)
|
43
|
-
def update(*args)
|
44
|
-
params = args.extract_options!
|
45
|
-
data = args.last
|
46
|
-
path = args.size == 2 ? args.first : @opts[:update_path]
|
47
|
-
self.send_request "/#{path}", params, data
|
48
|
-
end
|
49
|
-
|
50
|
-
end
|