rsolr 1.0.10.pre1 → 1.0.10
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.
- 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
|