rsolr 1.0.10.pre1 → 1.0.10
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +5 -0
- data/Gemfile +10 -6
- data/lib/rsolr/client.rb +37 -3
- data/lib/rsolr/error.rb +13 -1
- data/lib/rsolr/response.rb +8 -0
- data/lib/rsolr/version.rb +7 -0
- data/lib/rsolr.rb +1 -4
- data/rsolr.gemspec +4 -3
- data/spec/api/client_spec.rb +37 -0
- data/spec/api/connection_spec.rb +1 -0
- metadata +33 -18
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2c51404db922cb38d87d897879b80c175e6999fe
|
4
|
+
data.tar.gz: 3c6ac7bf24da6216b288442fc10fc9e207941c00
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3ad642cbdd3f948e7f372dbcc75f0e63ae4b011678f2d2b7730f40f378b4298814dbea5fe5a32044317c6537f4eed07064cc1b0e68e429b21bf720bc4ff15e2f
|
7
|
+
data.tar.gz: a3c3283fb33be2db71b9195d5f177075673b819ea5f20e163d0ae69af8b2b7fcfb66f4411edb245f381f3832c8cd4ab8e692e0c01480cb284b10d411d82eafb6
|
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
@@ -1,15 +1,19 @@
|
|
1
|
-
source "
|
1
|
+
source "https://rubygems.org"
|
2
2
|
|
3
3
|
gemspec
|
4
4
|
|
5
5
|
gem "builder", ">= 2.1.2"
|
6
6
|
|
7
7
|
group :development do
|
8
|
-
gem "rake", "
|
9
|
-
gem "rdoc", "
|
8
|
+
gem "rake", ">= 0.9.2"
|
9
|
+
gem "rdoc", ">= 3.9"
|
10
10
|
end
|
11
11
|
|
12
12
|
group :test do
|
13
|
-
gem "rake", "
|
14
|
-
gem "rspec", "~> 2.6
|
15
|
-
end
|
13
|
+
gem "rake", ">= 0.9.2"
|
14
|
+
gem "rspec", "~> 2.6"
|
15
|
+
end
|
16
|
+
|
17
|
+
if defined? RUBY_VERSION and RUBY_VERSION < "1.9"
|
18
|
+
gem 'nokogiri', "< 1.6"
|
19
|
+
end
|
data/lib/rsolr/client.rb
CHANGED
@@ -1,4 +1,19 @@
|
|
1
|
+
begin
|
2
|
+
require 'json'
|
3
|
+
rescue LoadError
|
4
|
+
end
|
5
|
+
|
1
6
|
class RSolr::Client
|
7
|
+
|
8
|
+
class << self
|
9
|
+
def default_wt
|
10
|
+
@default_wt || :ruby
|
11
|
+
end
|
12
|
+
|
13
|
+
def default_wt= value
|
14
|
+
@default_wt = value
|
15
|
+
end
|
16
|
+
end
|
2
17
|
|
3
18
|
attr_reader :connection, :uri, :proxy, :options
|
4
19
|
|
@@ -225,7 +240,7 @@ class RSolr::Client
|
|
225
240
|
opts[:proxy] = proxy unless proxy.nil?
|
226
241
|
opts[:method] ||= :get
|
227
242
|
raise "The :data option can only be used if :method => :post" if opts[:method] != :post and opts[:data]
|
228
|
-
opts[:params] = opts[:params].nil? ? {:wt =>
|
243
|
+
opts[:params] = opts[:params].nil? ? {:wt => default_wt} : {:wt => default_wt}.merge(opts[:params])
|
229
244
|
query = RSolr::Uri.params_to_solr(opts[:params]) unless opts[:params].empty?
|
230
245
|
opts[:query] = query
|
231
246
|
if opts[:data].is_a? Hash
|
@@ -266,7 +281,13 @@ class RSolr::Client
|
|
266
281
|
raise "The response does not have the correct keys => :body, :headers, :status" unless
|
267
282
|
%W(body headers status) == response.keys.map{|k|k.to_s}.sort
|
268
283
|
raise RSolr::Error::Http.new request, response unless [200,302].include? response[:status]
|
269
|
-
|
284
|
+
|
285
|
+
result = if respond_to? "evaluate_#{request[:params][:wt]}_response", true
|
286
|
+
send "evaluate_#{request[:params][:wt]}_response", request, response
|
287
|
+
else
|
288
|
+
response[:body]
|
289
|
+
end
|
290
|
+
|
270
291
|
result.extend Context
|
271
292
|
result.request, result.response = request, response
|
272
293
|
result.is_a?(Hash) ? result.extend(RSolr::Response) : result
|
@@ -297,5 +318,18 @@ class RSolr::Client
|
|
297
318
|
raise RSolr::Error::InvalidRubyResponse.new request, response
|
298
319
|
end
|
299
320
|
end
|
300
|
-
|
321
|
+
|
322
|
+
def evaluate_json_response request, response
|
323
|
+
return response[:body] unless defined? JSON
|
324
|
+
|
325
|
+
begin
|
326
|
+
JSON.parse response[:body].to_s, :symbolize_names => true
|
327
|
+
rescue JSON::ParserError
|
328
|
+
raise RSolr::Error::InvalidJsonResponse.new request, response
|
329
|
+
end
|
330
|
+
end
|
331
|
+
|
332
|
+
def default_wt
|
333
|
+
self.class.default_wt
|
334
|
+
end
|
301
335
|
end
|
data/lib/rsolr/error.rb
CHANGED
@@ -110,7 +110,19 @@ module RSolr::Error
|
|
110
110
|
|
111
111
|
# Thrown if the :wt is :ruby
|
112
112
|
# but the body wasn't succesfully parsed/evaluated
|
113
|
-
class
|
113
|
+
class InvalidResponse < Http
|
114
|
+
|
115
|
+
end
|
116
|
+
|
117
|
+
# Thrown if the :wt is :ruby
|
118
|
+
# but the body wasn't succesfully parsed/evaluated
|
119
|
+
class InvalidJsonResponse < InvalidResponse
|
120
|
+
|
121
|
+
end
|
122
|
+
|
123
|
+
# Thrown if the :wt is :ruby
|
124
|
+
# but the body wasn't succesfully parsed/evaluated
|
125
|
+
class InvalidRubyResponse < InvalidResponse
|
114
126
|
|
115
127
|
end
|
116
128
|
|
data/lib/rsolr/response.rb
CHANGED
@@ -11,6 +11,14 @@ module RSolr::Response
|
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
14
|
+
def with_indifferent_access
|
15
|
+
if {}.respond_to?(:with_indifferent_access)
|
16
|
+
super.extend RSolr::Response
|
17
|
+
else
|
18
|
+
raise NoMethodError, "undefined method `with_indifferent_access' for #{self.inspect}:#{self.class.name}"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
14
22
|
# A response module which gets mixed into the solr ["response"]["docs"] array.
|
15
23
|
module PaginatedDocSet
|
16
24
|
|
data/lib/rsolr.rb
CHANGED
@@ -1,15 +1,12 @@
|
|
1
1
|
$: << "#{File.dirname(__FILE__)}" unless $:.include? File.dirname(__FILE__)
|
2
2
|
|
3
3
|
require 'rubygems'
|
4
|
+
require 'rsolr/version'
|
4
5
|
|
5
6
|
module RSolr
|
6
7
|
|
7
8
|
%W(Response Char Client Error Connection Uri Xml).each{|n|autoload n.to_sym, "rsolr/#{n.downcase}"}
|
8
9
|
|
9
|
-
def self.version; "1.0.10.pre1" end
|
10
|
-
|
11
|
-
VERSION = self.version
|
12
|
-
|
13
10
|
def self.connect *args
|
14
11
|
driver = Class === args[0] ? args[0] : RSolr::Connection
|
15
12
|
opts = Hash === args[-1] ? args[-1] : {}
|
data/rsolr.gemspec
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
2
|
$:.push File.expand_path("../lib", __FILE__)
|
3
3
|
|
4
|
-
require "rsolr"
|
4
|
+
require "rsolr/version"
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "rsolr"
|
8
8
|
s.summary = "A Ruby client for Apache Solr"
|
9
9
|
s.description = %q{RSolr aims to provide a simple and extensible library for working with Solr}
|
10
|
-
s.version = RSolr
|
10
|
+
s.version = RSolr::VERSION
|
11
11
|
s.authors = ["Antoine Latter", "Dmitry Lihachev",
|
12
12
|
"Lucas Souza", "Peter Kieltyka",
|
13
13
|
"Rob Di Marco", "Magnus Bergmark",
|
@@ -28,8 +28,9 @@ Gem::Specification.new do |s|
|
|
28
28
|
s.require_paths = ["lib"]
|
29
29
|
|
30
30
|
s.add_dependency 'builder', '>= 2.1.2'
|
31
|
+
s.add_development_dependency 'activesupport'
|
31
32
|
s.add_development_dependency 'nokogiri', '>= 1.4.0'
|
32
33
|
s.add_development_dependency 'rake', '~> 0.9.2'
|
33
34
|
s.add_development_dependency 'rdoc', '~> 3.9.4'
|
34
35
|
s.add_development_dependency 'rspec', '~> 2.6.0'
|
35
|
-
end
|
36
|
+
end
|
data/spec/api/client_spec.rb
CHANGED
@@ -212,6 +212,17 @@ describe "RSolr::Client" do
|
|
212
212
|
result.should == {:time=>"NOW"}
|
213
213
|
end
|
214
214
|
|
215
|
+
it 'should evaluate json responses when the :wt is :json' do
|
216
|
+
body = '{"time": "NOW"}'
|
217
|
+
result = client.adapt_response({:params=>{:wt=>:json}}, {:status => 200, :body => body, :headers => {}})
|
218
|
+
if defined? JSON
|
219
|
+
result.should == {:time=>"NOW"}
|
220
|
+
else
|
221
|
+
# ruby 1.8 without the JSON gem
|
222
|
+
result.should == '{"time": "NOW"}'
|
223
|
+
end
|
224
|
+
end
|
225
|
+
|
215
226
|
it "ought raise a RSolr::Error::InvalidRubyResponse when the ruby is indeed frugged, or even fruggified" do
|
216
227
|
lambda {
|
217
228
|
client.adapt_response({:params=>{:wt => :ruby}}, {:status => 200, :body => "<woops/>", :headers => {}})
|
@@ -220,6 +231,32 @@ describe "RSolr::Client" do
|
|
220
231
|
|
221
232
|
end
|
222
233
|
|
234
|
+
context "indifferent access" do
|
235
|
+
include ClientHelper
|
236
|
+
it "should raise a NoMethodError if the #with_indifferent_access extension isn't loaded" do
|
237
|
+
# TODO: Find a less implmentation-tied way to test this
|
238
|
+
Hash.any_instance.should_receive(:respond_to?).with(:with_indifferent_access).and_return(false)
|
239
|
+
body = "{'foo'=>'bar'}"
|
240
|
+
result = client.adapt_response({:params=>{:wt=>:ruby}}, {:status => 200, :body => body, :headers => {}})
|
241
|
+
lambda { result.with_indifferent_access }.should raise_error NoMethodError
|
242
|
+
end
|
243
|
+
|
244
|
+
it "should provide indifferent access" do
|
245
|
+
require 'active_support/core_ext/hash/indifferent_access'
|
246
|
+
body = "{'foo'=>'bar'}"
|
247
|
+
result = client.adapt_response({:params=>{:wt=>:ruby}}, {:status => 200, :body => body, :headers => {}})
|
248
|
+
indifferent_result = result.with_indifferent_access
|
249
|
+
|
250
|
+
result.should be_a(RSolr::Response)
|
251
|
+
result['foo'].should == 'bar'
|
252
|
+
result[:foo].should be_nil
|
253
|
+
|
254
|
+
indifferent_result.should be_a(RSolr::Response)
|
255
|
+
indifferent_result['foo'].should == 'bar'
|
256
|
+
indifferent_result[:foo].should == 'bar'
|
257
|
+
end
|
258
|
+
end
|
259
|
+
|
223
260
|
context "build_request" do
|
224
261
|
include ClientHelper
|
225
262
|
it 'should return a request context array' do
|
data/spec/api/connection_spec.rb
CHANGED
@@ -72,6 +72,7 @@ describe "RSolr::Connection" do
|
|
72
72
|
end
|
73
73
|
|
74
74
|
it "should configure Net:HTTP open_timeout" do
|
75
|
+
pending "doesn't work with ruby 1.8" if RUBY_VERSION < "1.9"
|
75
76
|
http.should_receive(:request).and_raise(Errno::ECONNREFUSED)
|
76
77
|
lambda {
|
77
78
|
subject.execute client, request_context
|
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: 1.0.10
|
4
|
+
version: 1.0.10
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Antoine Latter
|
@@ -28,76 +28,90 @@ authors:
|
|
28
28
|
autorequire:
|
29
29
|
bindir: bin
|
30
30
|
cert_chain: []
|
31
|
-
date: 2014-
|
31
|
+
date: 2014-03-26 00:00:00.000000000 Z
|
32
32
|
dependencies:
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
34
|
name: builder
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
36
36
|
requirements:
|
37
|
-
- -
|
37
|
+
- - ">="
|
38
38
|
- !ruby/object:Gem::Version
|
39
39
|
version: 2.1.2
|
40
40
|
type: :runtime
|
41
41
|
prerelease: false
|
42
42
|
version_requirements: !ruby/object:Gem::Requirement
|
43
43
|
requirements:
|
44
|
-
- -
|
44
|
+
- - ">="
|
45
45
|
- !ruby/object:Gem::Version
|
46
46
|
version: 2.1.2
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: activesupport
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - ">="
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - ">="
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '0'
|
47
61
|
- !ruby/object:Gem::Dependency
|
48
62
|
name: nokogiri
|
49
63
|
requirement: !ruby/object:Gem::Requirement
|
50
64
|
requirements:
|
51
|
-
- -
|
65
|
+
- - ">="
|
52
66
|
- !ruby/object:Gem::Version
|
53
67
|
version: 1.4.0
|
54
68
|
type: :development
|
55
69
|
prerelease: false
|
56
70
|
version_requirements: !ruby/object:Gem::Requirement
|
57
71
|
requirements:
|
58
|
-
- -
|
72
|
+
- - ">="
|
59
73
|
- !ruby/object:Gem::Version
|
60
74
|
version: 1.4.0
|
61
75
|
- !ruby/object:Gem::Dependency
|
62
76
|
name: rake
|
63
77
|
requirement: !ruby/object:Gem::Requirement
|
64
78
|
requirements:
|
65
|
-
- - ~>
|
79
|
+
- - "~>"
|
66
80
|
- !ruby/object:Gem::Version
|
67
81
|
version: 0.9.2
|
68
82
|
type: :development
|
69
83
|
prerelease: false
|
70
84
|
version_requirements: !ruby/object:Gem::Requirement
|
71
85
|
requirements:
|
72
|
-
- - ~>
|
86
|
+
- - "~>"
|
73
87
|
- !ruby/object:Gem::Version
|
74
88
|
version: 0.9.2
|
75
89
|
- !ruby/object:Gem::Dependency
|
76
90
|
name: rdoc
|
77
91
|
requirement: !ruby/object:Gem::Requirement
|
78
92
|
requirements:
|
79
|
-
- - ~>
|
93
|
+
- - "~>"
|
80
94
|
- !ruby/object:Gem::Version
|
81
95
|
version: 3.9.4
|
82
96
|
type: :development
|
83
97
|
prerelease: false
|
84
98
|
version_requirements: !ruby/object:Gem::Requirement
|
85
99
|
requirements:
|
86
|
-
- - ~>
|
100
|
+
- - "~>"
|
87
101
|
- !ruby/object:Gem::Version
|
88
102
|
version: 3.9.4
|
89
103
|
- !ruby/object:Gem::Dependency
|
90
104
|
name: rspec
|
91
105
|
requirement: !ruby/object:Gem::Requirement
|
92
106
|
requirements:
|
93
|
-
- - ~>
|
107
|
+
- - "~>"
|
94
108
|
- !ruby/object:Gem::Version
|
95
109
|
version: 2.6.0
|
96
110
|
type: :development
|
97
111
|
prerelease: false
|
98
112
|
version_requirements: !ruby/object:Gem::Requirement
|
99
113
|
requirements:
|
100
|
-
- - ~>
|
114
|
+
- - "~>"
|
101
115
|
- !ruby/object:Gem::Version
|
102
116
|
version: 2.6.0
|
103
117
|
description: RSolr aims to provide a simple and extensible library for working with
|
@@ -108,8 +122,8 @@ executables: []
|
|
108
122
|
extensions: []
|
109
123
|
extra_rdoc_files: []
|
110
124
|
files:
|
111
|
-
- .gitignore
|
112
|
-
- .travis.yml
|
125
|
+
- ".gitignore"
|
126
|
+
- ".travis.yml"
|
113
127
|
- CHANGES.txt
|
114
128
|
- Gemfile
|
115
129
|
- LICENSE
|
@@ -122,6 +136,7 @@ files:
|
|
122
136
|
- lib/rsolr/error.rb
|
123
137
|
- lib/rsolr/response.rb
|
124
138
|
- lib/rsolr/uri.rb
|
139
|
+
- lib/rsolr/version.rb
|
125
140
|
- lib/rsolr/xml.rb
|
126
141
|
- rsolr.gemspec
|
127
142
|
- spec/api/char_spec.rb
|
@@ -146,17 +161,17 @@ require_paths:
|
|
146
161
|
- lib
|
147
162
|
required_ruby_version: !ruby/object:Gem::Requirement
|
148
163
|
requirements:
|
149
|
-
- -
|
164
|
+
- - ">="
|
150
165
|
- !ruby/object:Gem::Version
|
151
166
|
version: '0'
|
152
167
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
153
168
|
requirements:
|
154
|
-
- -
|
169
|
+
- - ">="
|
155
170
|
- !ruby/object:Gem::Version
|
156
|
-
version:
|
171
|
+
version: '0'
|
157
172
|
requirements: []
|
158
173
|
rubyforge_project: rsolr
|
159
|
-
rubygems_version: 2.
|
174
|
+
rubygems_version: 2.2.2
|
160
175
|
signing_key:
|
161
176
|
specification_version: 4
|
162
177
|
summary: A Ruby client for Apache Solr
|