rsolr 0.9.6 → 0.9.7.1
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES.txt +15 -0
- data/README.rdoc +7 -33
- data/Rakefile +7 -69
- data/examples/http.rb +2 -3
- data/lib/rsolr/connection/{adapter/direct.rb → direct.rb} +2 -2
- data/lib/rsolr/connection/net_http.rb +79 -0
- data/lib/rsolr/connection.rb +57 -109
- data/lib/rsolr/message.rb +25 -24
- data/lib/rsolr.rb +9 -7
- data/lib/xout.rb +65 -0
- data/test/connection/direct_test.rb +2 -2
- data/test/connection/{http_test.rb → net_http_test.rb} +2 -2
- data/test/{http_client/util_test.rb → connection/utils_test.rb} +1 -1
- data/test/message_test.rb +2 -29
- metadata +12 -29
- data/lib/rsolr/connection/adapter/http.rb +0 -42
- data/lib/rsolr/http_client/adapter/curb.rb +0 -51
- data/lib/rsolr/http_client/adapter/net_http.rb +0 -48
- data/lib/rsolr/http_client.rb +0 -149
- data/lib/rsolr/message/adapter/builder.rb +0 -85
- data/lib/rsolr/message/adapter/libxml.rb +0 -59
- data/rsolr.gemspec +0 -46
- data/test/http_client/curb_test.rb +0 -18
- data/test/http_client/net_http_test.rb +0 -12
- data/test/http_client/test_methods.rb +0 -40
@@ -12,7 +12,7 @@ if defined?(JRUBY_VERSION)
|
|
12
12
|
|
13
13
|
def setup
|
14
14
|
base = File.expand_path( File.dirname(__FILE__) )
|
15
|
-
@dist = File.join(base, '..', '..', '
|
15
|
+
@dist = File.join(base, '..', '..', 'solr')
|
16
16
|
@home = File.join(dist, 'example', 'solr')
|
17
17
|
@solr = RSolr.connect(:direct, :home_dir=>@home, :dist_dir=>@dist)
|
18
18
|
@solr.delete_by_query('*:*')
|
@@ -26,7 +26,7 @@ if defined?(JRUBY_VERSION)
|
|
26
26
|
def test_new_connection_with_existing_core
|
27
27
|
Dir["#{@dist}/dist/*.jar"].each { |p| require p }
|
28
28
|
dc = org.apache.solr.servlet.DirectSolrConnection.new(@home, "#{@home}/data", nil)
|
29
|
-
adapter = RSolr::Connection::
|
29
|
+
adapter = RSolr::Connection::Direct.new dc
|
30
30
|
s = RSolr::Connection::Base.new(adapter)
|
31
31
|
assert_equal Hash, s.request('/admin/ping').class
|
32
32
|
adapter.close
|
@@ -3,12 +3,12 @@ unless defined?(JRUBY_VERSION)
|
|
3
3
|
require 'helper'
|
4
4
|
require 'connection/test_methods'
|
5
5
|
|
6
|
-
class
|
6
|
+
class NetHttpTest < RSolrBaseTest
|
7
7
|
|
8
8
|
include ConnectionTestMethods
|
9
9
|
|
10
10
|
def setup
|
11
|
-
@solr = RSolr.connect
|
11
|
+
@solr = RSolr.connect
|
12
12
|
@solr.delete_by_query('*:*')
|
13
13
|
@solr.commit
|
14
14
|
end
|
data/test/message_test.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
|
2
2
|
require 'helper'
|
3
3
|
|
4
|
-
|
4
|
+
class BuilderMessageTest < RSolrBaseTest
|
5
5
|
|
6
6
|
def builder
|
7
7
|
@builder ||= RSolr::Message::Builder.new
|
@@ -90,7 +90,7 @@ module MessageTestMethods
|
|
90
90
|
|
91
91
|
message = self.builder.add(data)
|
92
92
|
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>'
|
93
|
-
|
93
|
+
|
94
94
|
assert message.to_s=~/<field name="name">matt<\/field>/
|
95
95
|
assert message.to_s=~/<field name="name">sam<\/field>/
|
96
96
|
end
|
@@ -137,31 +137,4 @@ module MessageTestMethods
|
|
137
137
|
assert result.to_s =~ /<field name="name">matt2<\/field>/
|
138
138
|
end
|
139
139
|
|
140
|
-
end
|
141
|
-
|
142
|
-
#####
|
143
|
-
|
144
|
-
unless defined?(JRUBY_VERSION)
|
145
|
-
class LibxmlMessageTest < RSolrBaseTest
|
146
|
-
|
147
|
-
include MessageTestMethods
|
148
|
-
|
149
|
-
def setup
|
150
|
-
self.builder.adapter = RSolr::Message::Adapter::Libxml.new
|
151
|
-
end
|
152
|
-
|
153
|
-
end
|
154
|
-
end
|
155
|
-
|
156
|
-
|
157
|
-
#####
|
158
|
-
|
159
|
-
class BuilderMessageTest < RSolrBaseTest
|
160
|
-
|
161
|
-
include MessageTestMethods
|
162
|
-
|
163
|
-
def setup
|
164
|
-
self.builder.adapter = RSolr::Message::Adapter::Builder.new
|
165
|
-
end
|
166
|
-
|
167
140
|
end
|
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: 0.9.
|
4
|
+
version: 0.9.7.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matt Mitchell
|
@@ -9,19 +9,10 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-11-05 00:00:00 -05:00
|
13
13
|
default_executable:
|
14
|
-
dependencies:
|
15
|
-
|
16
|
-
name: builder
|
17
|
-
type: :runtime
|
18
|
-
version_requirement:
|
19
|
-
version_requirements: !ruby/object:Gem::Requirement
|
20
|
-
requirements:
|
21
|
-
- - ">="
|
22
|
-
- !ruby/object:Gem::Version
|
23
|
-
version: 2.1.2
|
24
|
-
version:
|
14
|
+
dependencies: []
|
15
|
+
|
25
16
|
description: RSolr is a Ruby gem for working with Apache Solr!
|
26
17
|
email: goodieboy@gmail.com
|
27
18
|
executables: []
|
@@ -34,22 +25,17 @@ extra_rdoc_files:
|
|
34
25
|
- README.rdoc
|
35
26
|
- CHANGES.txt
|
36
27
|
files:
|
37
|
-
- examples/http.rb
|
38
28
|
- examples/direct.rb
|
39
|
-
-
|
40
|
-
- lib/rsolr/connection/
|
41
|
-
- lib/rsolr/connection/
|
29
|
+
- examples/http.rb
|
30
|
+
- lib/rsolr/connection/direct.rb
|
31
|
+
- lib/rsolr/connection/net_http.rb
|
42
32
|
- lib/rsolr/connection.rb
|
43
|
-
- lib/rsolr/http_client/adapter/curb.rb
|
44
|
-
- lib/rsolr/http_client/adapter/net_http.rb
|
45
|
-
- lib/rsolr/http_client.rb
|
46
|
-
- lib/rsolr/message/adapter/builder.rb
|
47
|
-
- lib/rsolr/message/adapter/libxml.rb
|
48
33
|
- lib/rsolr/message.rb
|
34
|
+
- lib/rsolr.rb
|
35
|
+
- lib/xout.rb
|
49
36
|
- LICENSE
|
50
37
|
- Rakefile
|
51
38
|
- README.rdoc
|
52
|
-
- rsolr.gemspec
|
53
39
|
- CHANGES.txt
|
54
40
|
has_rdoc: true
|
55
41
|
homepage: http://github.com/mwmitchell/rsolr
|
@@ -75,18 +61,15 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
75
61
|
requirements: []
|
76
62
|
|
77
63
|
rubyforge_project:
|
78
|
-
rubygems_version: 1.3.
|
64
|
+
rubygems_version: 1.3.5
|
79
65
|
signing_key:
|
80
66
|
specification_version: 3
|
81
67
|
summary: A Ruby client for Apache Solr
|
82
68
|
test_files:
|
83
69
|
- test/connection/direct_test.rb
|
84
|
-
- test/connection/
|
70
|
+
- test/connection/net_http_test.rb
|
85
71
|
- test/connection/test_methods.rb
|
72
|
+
- test/connection/utils_test.rb
|
86
73
|
- test/helper.rb
|
87
|
-
- test/http_client/curb_test.rb
|
88
|
-
- test/http_client/net_http_test.rb
|
89
|
-
- test/http_client/test_methods.rb
|
90
|
-
- test/http_client/util_test.rb
|
91
74
|
- test/message_test.rb
|
92
75
|
- test/rsolr_test.rb
|
@@ -1,42 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Connection for standard HTTP Solr server
|
3
|
-
#
|
4
|
-
class RSolr::Connection::Adapter::HTTP
|
5
|
-
|
6
|
-
include RSolr::HTTPClient::Util
|
7
|
-
|
8
|
-
attr_reader :opts
|
9
|
-
|
10
|
-
# opts can have:
|
11
|
-
# :url => 'http://localhost:8080/solr'
|
12
|
-
def initialize(opts={}, &block)
|
13
|
-
opts[:url] ||= 'http://127.0.0.1:8983/solr'
|
14
|
-
@opts = opts
|
15
|
-
end
|
16
|
-
|
17
|
-
def connection
|
18
|
-
@connection ||= RSolr::HTTPClient.connect(@opts)
|
19
|
-
end
|
20
|
-
|
21
|
-
# send a request to the connection
|
22
|
-
# request '/update', :wt=>:xml, '</commit>'
|
23
|
-
def request(path, params={}, *extra)
|
24
|
-
opts = extra[-1].kind_of?(Hash) ? extra.pop : {}
|
25
|
-
data = extra[0]
|
26
|
-
# force a POST, use the query string as the POST body
|
27
|
-
if opts[:method] == :post and data.to_s.empty?
|
28
|
-
http_context = connection.post(path, hash_to_query(params), {}, {'Content-Type' => 'application/x-www-form-urlencoded'})
|
29
|
-
else
|
30
|
-
if data
|
31
|
-
# standard POST, using "data" as the POST body
|
32
|
-
http_context = connection.post(path, data, params, {"Content-Type" => 'text/xml; charset=utf-8'})
|
33
|
-
else
|
34
|
-
# standard GET
|
35
|
-
http_context = connection.get(path, params)
|
36
|
-
end
|
37
|
-
end
|
38
|
-
raise RSolr::RequestError.new(http_context[:body]) unless http_context[:status_code] == 200
|
39
|
-
http_context
|
40
|
-
end
|
41
|
-
|
42
|
-
end
|
@@ -1,51 +0,0 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
require 'curb'
|
3
|
-
|
4
|
-
class RSolr::HTTPClient::Adapter::Curb
|
5
|
-
|
6
|
-
include RSolr::HTTPClient::Util
|
7
|
-
|
8
|
-
attr :uri
|
9
|
-
attr :connection
|
10
|
-
|
11
|
-
def initialize(opts={})
|
12
|
-
@uri = URI.parse(opts[:url])
|
13
|
-
@connection = ::Curl::Easy.new
|
14
|
-
end
|
15
|
-
|
16
|
-
def get(path, params={})
|
17
|
-
@connection.url = _build_url(path, params)
|
18
|
-
@connection.multipart_form_post = false
|
19
|
-
@connection.perform
|
20
|
-
create_http_context(path, params)
|
21
|
-
end
|
22
|
-
|
23
|
-
def post(path, data, params={}, headers={})
|
24
|
-
@connection.url = _build_url(path, params)
|
25
|
-
@connection.headers = headers
|
26
|
-
@connection.http_post(data)
|
27
|
-
create_http_context(path, params, data, headers)
|
28
|
-
end
|
29
|
-
|
30
|
-
protected
|
31
|
-
|
32
|
-
def create_http_context(path, params, data=nil, headers={})
|
33
|
-
{
|
34
|
-
:status_code=>@connection.response_code.to_i,
|
35
|
-
:url=>@connection.url,
|
36
|
-
:body=>@connection.body_str,
|
37
|
-
:path=>path,
|
38
|
-
:params=>params,
|
39
|
-
:data=>data,
|
40
|
-
:headers=>headers
|
41
|
-
}
|
42
|
-
end
|
43
|
-
|
44
|
-
def _build_url(path, params={})
|
45
|
-
url = @uri.scheme + '://' + @uri.host
|
46
|
-
url += ':' + @uri.port.to_s if @uri.port
|
47
|
-
url += @uri.path + path
|
48
|
-
build_url(url, params, @uri.query) # build_url is coming from RSolr::HTTPClient::Util
|
49
|
-
end
|
50
|
-
|
51
|
-
end
|
@@ -1,48 +0,0 @@
|
|
1
|
-
require 'net/http'
|
2
|
-
|
3
|
-
class RSolr::HTTPClient::Adapter::NetHTTP
|
4
|
-
|
5
|
-
include RSolr::HTTPClient::Util
|
6
|
-
|
7
|
-
attr :uri
|
8
|
-
attr :connection
|
9
|
-
|
10
|
-
def initialize(opts={})
|
11
|
-
@uri = URI.parse(opts[:url])
|
12
|
-
@connection = Net::HTTP.new(@uri.host, @uri.port)
|
13
|
-
end
|
14
|
-
|
15
|
-
def get(path, params={})
|
16
|
-
url = _build_url(path, params)
|
17
|
-
net_http_response = @connection.get(url)
|
18
|
-
create_http_context(net_http_response, url, path, params)
|
19
|
-
end
|
20
|
-
|
21
|
-
def post(path, data, params={}, headers={})
|
22
|
-
url = _build_url(path, params)
|
23
|
-
net_http_response = @connection.post(url, data, headers)
|
24
|
-
create_http_context(net_http_response, url, path, params, data, headers)
|
25
|
-
end
|
26
|
-
|
27
|
-
protected
|
28
|
-
|
29
|
-
def create_http_context(net_http_response, url, path, params, data=nil, headers={})
|
30
|
-
full_url = "#{@uri.scheme}://#{@uri.host}"
|
31
|
-
full_url += @uri.port ? ":#{@uri.port}" : ''
|
32
|
-
full_url += url
|
33
|
-
{
|
34
|
-
:status_code=>net_http_response.code.to_i,
|
35
|
-
:url=>full_url,
|
36
|
-
:body=>net_http_response.body,
|
37
|
-
:path=>path,
|
38
|
-
:params=>params,
|
39
|
-
:data=>data,
|
40
|
-
:headers=>headers
|
41
|
-
}
|
42
|
-
end
|
43
|
-
|
44
|
-
def _build_url(path, params={})
|
45
|
-
build_url(@uri.path + path, params, @uri.query) # build_url is coming from RSolr::HTTPClient::Util
|
46
|
-
end
|
47
|
-
|
48
|
-
end
|
data/lib/rsolr/http_client.rb
DELETED
@@ -1,149 +0,0 @@
|
|
1
|
-
# A simple wrapper for different http client implementations.
|
2
|
-
# Supports #get and #post
|
3
|
-
# This was motivated by: http://apocryph.org/2008/11/09/more_indepth_analysis_ruby_http_client_performance/
|
4
|
-
|
5
|
-
# Each adapters' response should be a hash with the following keys:
|
6
|
-
# :status_code
|
7
|
-
# :url
|
8
|
-
# :body
|
9
|
-
# :path
|
10
|
-
# :params
|
11
|
-
# :data
|
12
|
-
# :headers
|
13
|
-
|
14
|
-
# Example:
|
15
|
-
# hclient = RSolr::HTTPClient.connect('http://www.google.com')
|
16
|
-
# # SAME AS
|
17
|
-
# hclient = RSolr::HTTPClient.connect(:net_http, 'http://www.google.com')
|
18
|
-
# hclient = RSolr::HTTPClient.connect(:curb, 'http://www.google.com')
|
19
|
-
# response = hclient.get('/search', :hl=>:en, :q=>:ruby, :btnG=>:Search)
|
20
|
-
# puts response[:status_code]
|
21
|
-
# puts response[:body]
|
22
|
-
|
23
|
-
require 'uri'
|
24
|
-
|
25
|
-
module RSolr::HTTPClient
|
26
|
-
|
27
|
-
module Adapter
|
28
|
-
autoload :Curb, 'rsolr/http_client/adapter/curb'
|
29
|
-
autoload :NetHTTP, 'rsolr/http_client/adapter/net_http'
|
30
|
-
end
|
31
|
-
|
32
|
-
class UnkownAdapterError < RuntimeError
|
33
|
-
end
|
34
|
-
|
35
|
-
class Base
|
36
|
-
|
37
|
-
attr_reader :adapter
|
38
|
-
|
39
|
-
# requires an instace of RSolr::HTTPClient::*
|
40
|
-
def initialize(adapter)
|
41
|
-
@adapter = adapter
|
42
|
-
end
|
43
|
-
|
44
|
-
# sends a GET reqest to the "path" variable
|
45
|
-
# an optional hash of "params" can be used,
|
46
|
-
# which is later transformed into a GET query string
|
47
|
-
def get(path, params={})
|
48
|
-
begin
|
49
|
-
http_context = @adapter.get(path, params)
|
50
|
-
rescue
|
51
|
-
raise RSolr::RequestError.new($!)
|
52
|
-
end
|
53
|
-
http_context
|
54
|
-
end
|
55
|
-
|
56
|
-
# sends a POST request to the "path" variable
|
57
|
-
# "data" is required, and must be a string
|
58
|
-
# "params" is an optional hash for query string params...
|
59
|
-
# "headers" is a hash for setting request header values.
|
60
|
-
def post(path, data, params={}, headers={})
|
61
|
-
begin
|
62
|
-
http_context = @adapter.post(path, data, params, headers)
|
63
|
-
rescue
|
64
|
-
raise RSolr::RequestError.new($!)
|
65
|
-
end
|
66
|
-
http_context
|
67
|
-
end
|
68
|
-
|
69
|
-
end
|
70
|
-
|
71
|
-
# Factory for creating connections.
|
72
|
-
# Can specify the connection type by
|
73
|
-
# using :net_http or :curb for the first argument.
|
74
|
-
# The ending arguments are always used for the connection adapter instance.
|
75
|
-
#
|
76
|
-
# Examples:
|
77
|
-
# # default net_http connection
|
78
|
-
# RSolr::HTTPClient.connect :url=>''
|
79
|
-
# # SAME AS
|
80
|
-
# RSolr::HTTPClient.connect :net_http, :url=>''
|
81
|
-
# # curb connection
|
82
|
-
# RSolr.connect :curb, :url=>''
|
83
|
-
def self.connect(*args)
|
84
|
-
type = args.first.is_a?(Symbol) ? args.shift : :net_http
|
85
|
-
opts = args
|
86
|
-
klass = case type
|
87
|
-
when :net_http,nil
|
88
|
-
'NetHTTP'
|
89
|
-
when :curb
|
90
|
-
'Curb'
|
91
|
-
else
|
92
|
-
raise UnkownAdapterError.new("Invalid adapter type: #{type} - use :curb or :net_http or blank for :net_http/default")
|
93
|
-
end
|
94
|
-
begin
|
95
|
-
Base.new Adapter.const_get(klass).new(*args)
|
96
|
-
end
|
97
|
-
end
|
98
|
-
|
99
|
-
module Util
|
100
|
-
|
101
|
-
# Performs URI escaping so that you can construct proper
|
102
|
-
# query strings faster. Use this rather than the cgi.rb
|
103
|
-
# version since it's faster. (Stolen from Rack).
|
104
|
-
def escape(s)
|
105
|
-
s.to_s.gsub(/([^ a-zA-Z0-9_.-]+)/n) {
|
106
|
-
'%'+$1.unpack('H2'*$1.size).join('%').upcase
|
107
|
-
}.tr(' ', '+')
|
108
|
-
end
|
109
|
-
|
110
|
-
# creates and returns a url as a string
|
111
|
-
# "url" is the base url
|
112
|
-
# "params" is an optional hash of GET style query params
|
113
|
-
# "string_query" is an extra query string that will be appended to the
|
114
|
-
# result of "url" and "params".
|
115
|
-
def build_url(url='', params={}, string_query='')
|
116
|
-
queries = [string_query, hash_to_query(params)]
|
117
|
-
queries.delete_if{|i| i.to_s.empty?}
|
118
|
-
url += "?#{queries.join('&')}" unless queries.empty?
|
119
|
-
url
|
120
|
-
end
|
121
|
-
|
122
|
-
# converts a key value pair to an escaped string:
|
123
|
-
# Example:
|
124
|
-
# build_param(:id, 1) == "id=1"
|
125
|
-
def build_param(k,v)
|
126
|
-
"#{escape(k)}=#{escape(v)}"
|
127
|
-
end
|
128
|
-
|
129
|
-
#
|
130
|
-
# converts hash into URL query string, keys get an alpha sort
|
131
|
-
# if a value is an array, the array values get mapped to the same key:
|
132
|
-
# hash_to_query(:q=>'blah', :fq=>['blah', 'blah'], :facet=>{:field=>['location_facet', 'format_facet']})
|
133
|
-
# returns:
|
134
|
-
# ?q=blah&fq=blah&fq=blah&facet.field=location_facet&facet.field=format.facet
|
135
|
-
#
|
136
|
-
# if a value is empty/nil etc., the key is not added
|
137
|
-
def hash_to_query(params)
|
138
|
-
params.map { |k, v|
|
139
|
-
if v.class == Array
|
140
|
-
hash_to_query(v.map { |x| [k, x] })
|
141
|
-
else
|
142
|
-
build_param k, v
|
143
|
-
end
|
144
|
-
}.join("&")
|
145
|
-
end
|
146
|
-
|
147
|
-
end
|
148
|
-
|
149
|
-
end
|
@@ -1,85 +0,0 @@
|
|
1
|
-
require 'builder'
|
2
|
-
|
3
|
-
class RSolr::Message::Adapter::Builder
|
4
|
-
|
5
|
-
# shortcut method -> xml = RSolr::Message.xml
|
6
|
-
def xml
|
7
|
-
::Builder::XmlMarkup.new
|
8
|
-
end
|
9
|
-
|
10
|
-
# generates "add" xml for updating solr
|
11
|
-
# "data" can be a hash or an array of hashes.
|
12
|
-
# - each hash should be a simple key=>value pair representing a solr doc.
|
13
|
-
# If a value is an array, multiple fields will be created.
|
14
|
-
#
|
15
|
-
# "add_attrs" can be a hash for setting the add xml element attributes.
|
16
|
-
#
|
17
|
-
# This method can also accept a block.
|
18
|
-
# The value yielded to the block is a Message::Document; for each solr doc in "data".
|
19
|
-
# You can set xml element attributes for each "doc" element or individual "field" elements.
|
20
|
-
#
|
21
|
-
# For example:
|
22
|
-
#
|
23
|
-
# solr.add({:id=>1, :nickname=>'Tim'}, {:boost=>5.0, :commitWithin=>1.0}) do |doc_msg|
|
24
|
-
# doc_msg.attrs[:boost] = 10.00 # boost the document
|
25
|
-
# nickname = doc_msg.field_by_name(:nickname)
|
26
|
-
# nickname.attrs[:boost] = 20 if nickname.value=='Tim' # boost a field
|
27
|
-
# end
|
28
|
-
#
|
29
|
-
# would result in an add element having the attributes boost="10.0"
|
30
|
-
# and a commitWithin="1.0".
|
31
|
-
# Each doc element would have a boost="10.0".
|
32
|
-
# The "nickname" field would have a boost="20.0"
|
33
|
-
# if the doc had a "nickname" field with the value of "Tim".
|
34
|
-
#
|
35
|
-
def add(documents, add_attrs={})
|
36
|
-
xml.add(add_attrs) do |add_node|
|
37
|
-
documents.each do |doc|
|
38
|
-
# create doc, passing in fields
|
39
|
-
add_node.doc(doc.attrs) do |doc_node|
|
40
|
-
doc.fields.each do |field_obj|
|
41
|
-
doc_node.field(field_obj.value, field_obj.attrs)
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
# generates a <commit/> message
|
49
|
-
def commit(opts={})
|
50
|
-
xml.commit(opts)
|
51
|
-
end
|
52
|
-
|
53
|
-
# generates a <optimize/> message
|
54
|
-
def optimize(opts={})
|
55
|
-
xml.optimize(opts)
|
56
|
-
end
|
57
|
-
|
58
|
-
# generates a <rollback/> message
|
59
|
-
def rollback
|
60
|
-
xml.rollback
|
61
|
-
end
|
62
|
-
|
63
|
-
# generates a <delete><id>ID</id></delete> message
|
64
|
-
# "ids" can be a single value or array of values
|
65
|
-
def delete_by_id(ids)
|
66
|
-
ids = [ids] unless ids.is_a?(Array)
|
67
|
-
xml.delete do |xml|
|
68
|
-
ids.each do |id|
|
69
|
-
xml.id(id)
|
70
|
-
end
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
# generates a <delete><query>ID</query></delete> message
|
75
|
-
# "queries" can be a single value or an array of values
|
76
|
-
def delete_by_query(queries)
|
77
|
-
queries = [queries] unless queries.is_a?(Array)
|
78
|
-
xml.delete do |xml|
|
79
|
-
queries.each do |query|
|
80
|
-
xml.query(query)
|
81
|
-
end
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
|
-
end
|
@@ -1,59 +0,0 @@
|
|
1
|
-
require 'libxml'
|
2
|
-
|
3
|
-
class RSolr::Message::Adapter::Libxml
|
4
|
-
|
5
|
-
def add(documents, attributes = {})
|
6
|
-
add_node = new_node('add', attributes)
|
7
|
-
for document in documents
|
8
|
-
add_node << doc_node = new_node('doc', document.attrs)
|
9
|
-
for field in document.fields
|
10
|
-
doc_node << field_node = new_node('field', field.attrs)
|
11
|
-
field_node << field.value
|
12
|
-
end
|
13
|
-
end
|
14
|
-
add_node.to_s(:indent => false)
|
15
|
-
end
|
16
|
-
|
17
|
-
def delete_by_id(ids)
|
18
|
-
delete = new_node('delete')
|
19
|
-
for id in Array(ids)
|
20
|
-
id_node = new_node('id')
|
21
|
-
id_node << id
|
22
|
-
delete << id_node
|
23
|
-
end
|
24
|
-
delete.to_s(:indent => false)
|
25
|
-
end
|
26
|
-
|
27
|
-
def delete_by_query(queries)
|
28
|
-
delete = new_node('delete')
|
29
|
-
for query in Array(queries)
|
30
|
-
query_node = new_node('query')
|
31
|
-
query_node << query
|
32
|
-
delete << query_node
|
33
|
-
end
|
34
|
-
delete.to_s(:indent => false)
|
35
|
-
end
|
36
|
-
|
37
|
-
def optimize(opts)
|
38
|
-
new_node('optimize', opts).to_s
|
39
|
-
end
|
40
|
-
|
41
|
-
def rollback
|
42
|
-
new_node('rollback').to_s
|
43
|
-
end
|
44
|
-
|
45
|
-
def commit(opts = {})
|
46
|
-
new_node('commit', opts).to_s
|
47
|
-
end
|
48
|
-
|
49
|
-
private
|
50
|
-
|
51
|
-
def new_node(name, opts = {})
|
52
|
-
node = LibXML::XML::Node.new(name)
|
53
|
-
opts.each_pair do |attr, value|
|
54
|
-
node[attr.to_s] = value.to_s
|
55
|
-
end
|
56
|
-
node
|
57
|
-
end
|
58
|
-
|
59
|
-
end
|
data/rsolr.gemspec
DELETED
@@ -1,46 +0,0 @@
|
|
1
|
-
Gem::Specification.new do |s|
|
2
|
-
s.name = "rsolr"
|
3
|
-
s.version = "0.9.6"
|
4
|
-
s.date = "2009-09-12"
|
5
|
-
s.summary = "A Ruby client for Apache Solr"
|
6
|
-
s.email = "goodieboy@gmail.com"
|
7
|
-
s.homepage = "http://github.com/mwmitchell/rsolr"
|
8
|
-
s.description = "RSolr is a Ruby gem for working with Apache Solr!"
|
9
|
-
s.has_rdoc = true
|
10
|
-
s.authors = ["Matt Mitchell"]
|
11
|
-
|
12
|
-
s.files = [
|
13
|
-
"examples/http.rb",
|
14
|
-
"examples/direct.rb",
|
15
|
-
"lib/rsolr.rb",
|
16
|
-
"lib/rsolr/connection/adapter/direct.rb",
|
17
|
-
"lib/rsolr/connection/adapter/http.rb",
|
18
|
-
"lib/rsolr/connection.rb",
|
19
|
-
"lib/rsolr/http_client/adapter/curb.rb",
|
20
|
-
"lib/rsolr/http_client/adapter/net_http.rb",
|
21
|
-
"lib/rsolr/http_client.rb",
|
22
|
-
"lib/rsolr/message/adapter/builder.rb",
|
23
|
-
"lib/rsolr/message/adapter/libxml.rb",
|
24
|
-
"lib/rsolr/message.rb",
|
25
|
-
"LICENSE",
|
26
|
-
"Rakefile",
|
27
|
-
"README.rdoc",
|
28
|
-
"rsolr.gemspec",
|
29
|
-
"CHANGES.txt"
|
30
|
-
]
|
31
|
-
s.test_files = [
|
32
|
-
"test/connection/direct_test.rb",
|
33
|
-
"test/connection/http_test.rb",
|
34
|
-
"test/connection/test_methods.rb",
|
35
|
-
"test/helper.rb",
|
36
|
-
"test/http_client/curb_test.rb",
|
37
|
-
"test/http_client/net_http_test.rb",
|
38
|
-
"test/http_client/test_methods.rb",
|
39
|
-
"test/http_client/util_test.rb",
|
40
|
-
"test/message_test.rb",
|
41
|
-
"test/rsolr_test.rb"
|
42
|
-
]
|
43
|
-
#s.rdoc_options = ["--main", "README.rdoc"]
|
44
|
-
s.extra_rdoc_files = %w(LICENSE Rakefile README.rdoc CHANGES.txt)
|
45
|
-
s.add_dependency("builder", [">= 2.1.2"])
|
46
|
-
end
|
@@ -1,18 +0,0 @@
|
|
1
|
-
# don't run this test in jruby,
|
2
|
-
# the curb gem is a c extension based gem, jruby has no support for this
|
3
|
-
unless defined?(JRUBY_VERSION)
|
4
|
-
|
5
|
-
require 'helper'
|
6
|
-
require 'http_client/test_methods'
|
7
|
-
|
8
|
-
class CurbTest < RSolrBaseTest
|
9
|
-
|
10
|
-
def setup
|
11
|
-
@c ||= RSolr::HTTPClient::connect(:curb, :url=>URL)
|
12
|
-
end
|
13
|
-
|
14
|
-
include HTTPClientTestMethods
|
15
|
-
|
16
|
-
end
|
17
|
-
|
18
|
-
end
|