rsolr 1.0.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  A simple, extensible Ruby client for Apache Solr.
4
4
 
5
- Notice: This document is only for the the 1.0 (pre-release) in the master branch. The last stable gem release documentation can be found here: http://github.com/mwmitchell/rsolr/tree/v0.12.1
5
+ Notice: This document is only for the the 1.0 in the master. The last pre-1.0 gem release documentation can be found here: http://github.com/mwmitchell/rsolr/tree/v0.12.1
6
6
 
7
7
  ==Documentation
8
8
  The code docs can be viewed here : http://rdoc.info/projects/mwmitchell/rsolr
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.0.0
1
+ 1.0.1
data/lib/rsolr/client.rb CHANGED
@@ -5,12 +5,14 @@ class RSolr::Client
5
5
  def initialize connection, options = {}
6
6
  @connection = connection
7
7
  unless false === options[:url]
8
- url = options[:url] || 'http://127.0.0.1:8983/solr/'
8
+ url = options[:url] ? options[:url].dup : 'http://127.0.0.1:8983/solr/'
9
9
  url << "/" unless url[-1] == ?/
10
- proxy_url = options[:proxy]
11
- proxy_url << "/" unless proxy_url.nil? or proxy_url[-1] == ?/
12
10
  @uri = RSolr::Uri.create url
13
- @proxy = RSolr::Uri.create proxy_url if proxy_url
11
+ if options[:proxy]
12
+ proxy_url = options[:proxy].dup
13
+ proxy_url << "/" unless proxy_url.nil? or proxy_url[-1] == ?/
14
+ @proxy = RSolr::Uri.create proxy_url if proxy_url
15
+ end
14
16
  end
15
17
  @options = options
16
18
  extend RSolr::Pagination::Client
@@ -223,7 +225,7 @@ class RSolr::Client
223
225
  end
224
226
 
225
227
  # evaluates the response[:body],
226
- # attemps to bring the ruby string to life.
228
+ # attempts to bring the ruby string to life.
227
229
  # If a SyntaxError is raised, then
228
230
  # this method intercepts and raises a
229
231
  # RSolr::Error::InvalidRubyResponse
@@ -237,4 +239,4 @@ class RSolr::Client
237
239
  end
238
240
  end
239
241
 
240
- end
242
+ end
@@ -61,7 +61,7 @@ class RSolr::Connection
61
61
  # request_context[:path],
62
62
  # :file => io)
63
63
  # else
64
- raw_request = http_method.new request_context[:uri].to_s
64
+ raw_request = http_method.new request_context[:uri].request_uri
65
65
  # end
66
66
  raw_request.initialize_http_header headers
67
67
  raw_request
data/lib/rsolr/error.rb CHANGED
@@ -25,6 +25,10 @@ module RSolr::Error
25
25
  def parse_solr_error_response body
26
26
  begin
27
27
  info = body.scan(/<pre>(.*)<\/pre>/mi)[0]
28
+ info = info.join if info.respond_to? :join
29
+
30
+ info ||= body # body may not contain <pre> elements
31
+
28
32
  partial = info.to_s.split("\n")[0..10]
29
33
  partial.join("\n").gsub("&gt;", ">").gsub("&lt;", "<")
30
34
  rescue
@@ -110,4 +114,4 @@ module RSolr::Error
110
114
 
111
115
  end
112
116
 
113
- end
117
+ end
@@ -17,6 +17,7 @@ module RSolr::Pagination
17
17
 
18
18
  # A paginated request method.
19
19
  def paginate page, per_page, path, opts = nil
20
+ warn "DEPRECATION WARNING: RSolr::Pagination / pagination functionality will be removed in 1.1.0. It will instead be available in RSolr::Ext 1.1.0"
20
21
  request_context = build_paginated_request page, per_page, path, opts
21
22
  execute request_context
22
23
  end
@@ -0,0 +1,111 @@
1
+ require 'java'
2
+ require 'rubygems'
3
+ require 'rsolr'
4
+
5
+ #
6
+ # Connection for JRuby + DirectSolrConnection
7
+ #
8
+ module RSolr::Direct
9
+
10
+ # load the java libs that ship with rsolr-direct
11
+ # RSolr.load_java_libs
12
+ # rsolr = RSolr.connect :direct, :solr_home => ''
13
+ def self.load_java_libs apache_solr_dir
14
+ @java_libs_loaded ||= (
15
+ base_dir = File.expand_path(apache_solr_dir)
16
+ ['lib', 'dist'].each do |sub|
17
+ Dir[File.join(base_dir, sub, '*.jar')].each do |jar|
18
+ require jar
19
+ end
20
+ end
21
+ true
22
+ )
23
+ end
24
+
25
+ RSolr.class_eval do
26
+ # RSolr.direct_connect :solr_home => 'apache-solr/example/solr'
27
+ # RSolr.direct_connect java_solr_core
28
+ # RSolr.direct_connect java_direct_solr_connection
29
+ def self.direct_connect *args, &blk
30
+ client = RSolr::Client.new RSolr::Direct::Connection.new(*args), {:url => false}
31
+ if block_given?
32
+ yield client
33
+ client.connection.close
34
+ nil
35
+ else
36
+ client
37
+ end
38
+ end
39
+ end
40
+
41
+ class Connection
42
+
43
+ attr_accessor :opts
44
+
45
+ class MissingRequiredJavaLibs < RuntimeError
46
+ end
47
+
48
+ class InvalidSolrHome < RuntimeError
49
+ end
50
+
51
+ # opts can be an instance of org.apache.solr.servlet.DirectSolrConnection
52
+ # if opts is NOT an instance of org.apache.solr.servlet.DirectSolrConnection
53
+ # then...
54
+ # required: opts[:solr_home] is absolute path to solr home (the directory with "data", "config" etc.)
55
+ def initialize opts
56
+ begin
57
+ org.apache.solr.servlet.DirectSolrConnection
58
+ rescue NameError
59
+ raise MissingRequiredJavaLibs
60
+ end
61
+ if opts.is_a?(Hash) and opts[:solr_home]
62
+ raise InvalidSolrHome unless File.exists?(opts[:solr_home])
63
+ opts[:data_dir] ||= File.join(opts[:solr_home], 'data')
64
+ @opts = opts
65
+ elsif opts.class.to_s == "Java::OrgApacheSolrCore::SolrCore"
66
+ @direct = org.apache.solr.servlet.DirectSolrConnection.new(opts)
67
+ elsif opts.class.to_s == "Java::OrgApacheSolrServlet::DirectSolrConnection"
68
+ @direct = opts
69
+ end
70
+ opts[:auto_connect] = true unless opts.key?(:auto_connect)
71
+ self.direct if opts[:auto_connect]
72
+ end
73
+
74
+ # sets the @direct instance variable if it has not yet been set
75
+ def direct
76
+ @direct ||= org.apache.solr.servlet.DirectSolrConnection.new(opts[:solr_home], @opts[:data_dir], nil)
77
+ end
78
+
79
+ # rsolr.connection.open
80
+ alias_method :open, :direct
81
+
82
+ def close
83
+ if @direct
84
+ @direct.close
85
+ @direct = nil
86
+ end
87
+ end
88
+
89
+ # send a request to the connection
90
+ def execute client, request_context
91
+ #data = request_context[:data]
92
+ #data = data.to_xml if data.respond_to?(:to_xml)
93
+ url = [request_context[:path], request_context[:query]].join("?")
94
+ url = "/" + url unless url[0].chr == "/"
95
+ begin
96
+ body = direct.request(url, request_context[:data])
97
+ rescue
98
+ $!.extend RSolr::Error::SolrContext
99
+ $!.request = request_context
100
+ raise $!
101
+ end
102
+ {
103
+ :status => 200,
104
+ :body => body,
105
+ :headers => {}
106
+ }
107
+ end
108
+
109
+ end
110
+
111
+ end
data/lib/rsolr.rb CHANGED
@@ -13,7 +13,9 @@ module RSolr
13
13
  VERSION = self.version
14
14
 
15
15
  def self.connect *args
16
- Client.new Connection.new, *args
16
+ driver = Class === args[0] ? args[0] : RSolr::Connection
17
+ opts = Hash === args[-1] ? args[-1] : {}
18
+ Client.new driver.new, opts
17
19
  end
18
20
 
19
21
  # RSolr.escape
@@ -1,11 +1,15 @@
1
1
  require 'spec_helper'
2
2
  describe "RSolr::Connection" do
3
3
 
4
- # context "execute" do
5
- # c = RSolr::Connection.new
6
- # base_url = "http://localhost:8983/solr"
7
- # client = RSolr::Client.new c, :url => base_url
8
- # c.execute client, {:method => :get, :uri => URI.parse(base_url + "/select")}
9
- # end
4
+ context "setup_raw_request" do
5
+ c = RSolr::Connection.new
6
+ base_url = "http://localhost:8983/solr"
7
+ client = RSolr::Client.new c, :url => base_url
8
+ req = c.send :setup_raw_request, {:headers => {"content-type" => "text/xml"}, :method => :get, :uri => URI.parse(base_url + "/select?q=*:*")}
9
+ req.path.should == "/solr/select?q=*:*"
10
+ headers = {}
11
+ req.each_header{|k,v| headers[k] = v}
12
+ headers.should == {"content-type"=>"text/xml"}
13
+ end
10
14
 
11
15
  end
@@ -1,4 +1,56 @@
1
1
  require 'spec_helper'
2
2
  describe "RSolr::Error" do
3
-
4
- end
3
+ def generate_error_with_backtrace(request, response)
4
+ raise RSolr::Error::Http.new request, response
5
+ rescue RSolr::Error::Http => exception
6
+ exception
7
+ end
8
+
9
+ context "when the response body is wrapped in a <pre> element" do
10
+ before do
11
+ response_lines = (1..15).to_a.map { |i| "line #{i}" }
12
+
13
+ @request = mock :[] => "mocked"
14
+ @response = {
15
+ :body => "<pre>" + response_lines.join("\n") + "</pre>",
16
+ :status => 400
17
+ }
18
+ end
19
+
20
+ it "only shows the first eleven lines of the response" do
21
+ error = generate_error_with_backtrace @request, @response
22
+ error.to_s.should match(/line 1\n.+line 11\n\n/m)
23
+ end
24
+
25
+ it "shows only one line when the response is one line long" do
26
+ @response[:body] = "<pre>failed</pre>"
27
+
28
+ error = generate_error_with_backtrace @request, @response
29
+ error.to_s.should match(/Error: failed/)
30
+ end
31
+ end
32
+
33
+ context "when the response body is not wrapped in a <pre> element" do
34
+ before do
35
+ response_lines = (1..15).to_a.map { |i| "line #{i}" }
36
+
37
+ @request = mock :[] => "mocked"
38
+ @response = {
39
+ :body => response_lines.join("\n"),
40
+ :status => 400
41
+ }
42
+ end
43
+
44
+ it "only shows the first eleven lines of the response" do
45
+ error = generate_error_with_backtrace @request, @response
46
+ error.to_s.should match(/line 1\n.+line 11\n\n/m)
47
+ end
48
+
49
+ it "shows only one line when the response is one line long" do
50
+ @response[:body] = "failed"
51
+
52
+ error = generate_error_with_backtrace @request, @response
53
+ error.to_s.should match(/Error: failed/)
54
+ end
55
+ end
56
+ end
data/spec/spec_helper.rb CHANGED
@@ -1 +1 @@
1
- require File.join(File.dirname(__FILE__), '..', 'lib', 'rsolr')
1
+ require File.expand_path('../../lib/rsolr', __FILE__)
data/tasks/rdoc.rake CHANGED
@@ -1,9 +1,11 @@
1
1
  # Rdoc
2
+ require "rdoc/task"
3
+
2
4
  desc 'Generate documentation for the rsolr gem.'
3
- Rake::RDocTask.new(:doc) do |rdoc|
5
+ RDoc::Task.new(:doc) do |rdoc|
4
6
  rdoc.rdoc_dir = 'doc'
5
7
  rdoc.title = 'RSolr'
6
8
  rdoc.options << '--line-numbers' << '--inline-source'
7
9
  rdoc.rdoc_files.include('README.rdoc')
8
10
  rdoc.rdoc_files.include('lib/**/*.rb')
9
- end
11
+ end
data/tasks/spec.rake CHANGED
@@ -1,9 +1,6 @@
1
- gem 'rspec'
2
-
3
- # $stderr.puts `gem list`
4
-
5
- require 'spec'
6
- require 'spec/rake/spectask'
1
+ require "rubygems"
2
+ require 'rspec'
3
+ require 'rspec/core/rake_task'
7
4
 
8
5
  namespace :spec do
9
6
 
@@ -20,23 +17,23 @@ namespace :spec do
20
17
  end
21
18
 
22
19
  desc 'run api specs (mock out Solr dependency)'
23
- Spec::Rake::SpecTask.new(:api) do |t|
20
+ RSpec::Core::RakeTask.new(:api) do |t|
24
21
 
25
- t.spec_files = [File.join('spec', 'spec_helper.rb')]
26
- t.spec_files += FileList[File.join('spec', 'api', '**', '*_spec.rb')]
22
+ t.pattern = [File.join('spec', 'spec_helper.rb')]
23
+ t.pattern += FileList[File.join('spec', 'api', '**', '*_spec.rb')]
27
24
 
28
25
  t.verbose = true
29
- t.spec_opts = ['--color']
26
+ t.rspec_opts = ['--color']
30
27
  end
31
28
 
32
29
  desc 'run integration specs'
33
- Spec::Rake::SpecTask.new(:integration) do |t|
30
+ RSpec::Core::RakeTask.new(:integration) do |t|
34
31
 
35
- t.spec_files = [File.join('spec', 'spec_helper.rb')]
36
- t.spec_files += FileList[File.join('spec', 'integration', '**', '*_spec.rb')]
32
+ t.pattern = [File.join('spec', 'spec_helper.rb')]
33
+ t.pattern += FileList[File.join('spec', 'integration', '**', '*_spec.rb')]
37
34
 
38
35
  t.verbose = true
39
- t.spec_opts = ['--color']
36
+ t.rspec_opts = ['--color']
40
37
  end
41
38
 
42
39
  end
metadata CHANGED
@@ -1,29 +1,42 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rsolr
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: false
4
+ hash: 21
5
+ prerelease:
5
6
  segments:
6
7
  - 1
7
8
  - 0
8
- - 0
9
- version: 1.0.0
9
+ - 1
10
+ version: 1.0.1
10
11
  platform: ruby
11
12
  authors:
12
13
  - Matt Mitchell
14
+ - Jeremy Hinegardner
15
+ - Mat Brown
16
+ - Mike Perham
17
+ - Nathan Witmer
18
+ - Peter Kieltyka
19
+ - Randy Souza
20
+ - shairon toledo
21
+ - shima
22
+ - Chris Beer
23
+ - Jonathan Rochkind
13
24
  autorequire:
14
25
  bindir: bin
15
26
  cert_chain: []
16
27
 
17
- date: 2011-01-05 00:00:00 -05:00
28
+ date: 2011-05-23 00:00:00 -04:00
18
29
  default_executable:
19
30
  dependencies:
20
31
  - !ruby/object:Gem::Dependency
21
32
  name: builder
22
33
  prerelease: false
23
34
  requirement: &id001 !ruby/object:Gem::Requirement
35
+ none: false
24
36
  requirements:
25
37
  - - ">="
26
38
  - !ruby/object:Gem::Version
39
+ hash: 15
27
40
  segments:
28
41
  - 2
29
42
  - 1
@@ -44,6 +57,7 @@ files:
44
57
  - LICENSE
45
58
  - README.rdoc
46
59
  - VERSION
60
+ - lib/rsolr-direct.rb
47
61
  - lib/rsolr.rb
48
62
  - lib/rsolr/char.rb
49
63
  - lib/rsolr/client.rb
@@ -52,33 +66,49 @@ files:
52
66
  - lib/rsolr/pagination.rb
53
67
  - lib/rsolr/uri.rb
54
68
  - lib/rsolr/xml.rb
69
+ - spec/api/char_spec.rb
70
+ - spec/api/client_spec.rb
71
+ - spec/api/connection_spec.rb
72
+ - spec/api/error_spec.rb
73
+ - spec/api/pagination_spec.rb
74
+ - spec/api/rsolr_spec.rb
75
+ - spec/api/uri_spec.rb
76
+ - spec/api/xml_spec.rb
77
+ - spec/spec_helper.rb
78
+ - Rakefile
79
+ - tasks/spec.rake
80
+ - tasks/rdoc.rake
55
81
  has_rdoc: true
56
82
  homepage: http://github.com/mwmitchell/rsolr
57
83
  licenses: []
58
84
 
59
85
  post_install_message:
60
- rdoc_options:
61
- - --charset=UTF-8
86
+ rdoc_options: []
87
+
62
88
  require_paths:
63
89
  - lib
64
90
  required_ruby_version: !ruby/object:Gem::Requirement
91
+ none: false
65
92
  requirements:
66
93
  - - ">="
67
94
  - !ruby/object:Gem::Version
95
+ hash: 3
68
96
  segments:
69
97
  - 0
70
98
  version: "0"
71
99
  required_rubygems_version: !ruby/object:Gem::Requirement
100
+ none: false
72
101
  requirements:
73
102
  - - ">="
74
103
  - !ruby/object:Gem::Version
104
+ hash: 3
75
105
  segments:
76
106
  - 0
77
107
  version: "0"
78
108
  requirements: []
79
109
 
80
110
  rubyforge_project:
81
- rubygems_version: 1.3.6
111
+ rubygems_version: 1.6.2
82
112
  signing_key:
83
113
  specification_version: 3
84
114
  summary: A Ruby client for Apache Solr