rsolr 1.0.6 → 1.0.7

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.
@@ -1,3 +1,10 @@
1
+ 1.0.7
2
+ - Response body encoding is set to response charset in Ruby >= 1.9
3
+ - Ability to set :read_timeout and :open_timeout when creating new instance of RSolr
4
+ 1.0.6
5
+ - More dependency fixups
6
+ 1.0.5
7
+ - Dependency fixups
1
8
  1.0.4
2
9
  - The "builder" gem dependency is less strict: ~> 2.1.2
3
10
  - RSolr.version is no longer read from a file
@@ -2,10 +2,8 @@
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 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
-
7
5
  ==Documentation
8
- The code docs for the last *release* can be viewed here : http://rdoc.info/projects/mwmitchell/rsolr
6
+ The code docs for the last *release* can be viewed here: http://rubydoc.info/gems/rsolr/1.0.6/frames
9
7
 
10
8
  == Installation:
11
9
  sudo gem install rsolr
@@ -34,6 +32,10 @@ The :request attribute contains the original request context. You can use this f
34
32
 
35
33
  The :response attribute contains the original response. This object contains the :status, :body and :headers keys.
36
34
 
35
+ == Timeouts
36
+ The read and connect timeout settings can be set when creating a new instance of RSolr:
37
+ solr = RSolr.connect(:read_timeout => 120, :open_timeout => 120)
38
+
37
39
  == Querying
38
40
  Use the #get / #post method to send search requests to the /select handler:
39
41
  response = solr.get 'select', :params => {
@@ -173,17 +175,13 @@ The default response format is Ruby. When the :wt param is set to :ruby, the res
173
175
  (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
174
176
  * Send me a pull request. Bonus points for topic branches.
175
177
 
176
- == Note on Patches/Pull Requests
177
-
178
- * Fork the project.
179
- * Make your feature addition or bug fix.
180
- * Add tests for it. This is important so I don't break it in a
181
- future version unintentionally.
182
- * Commit, do not mess with rakefile, version, or history.
183
- (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
184
- * Send me a pull request. Bonus points for topic branches.
185
-
186
178
  ==Contributors
179
+ * Antoine Latter
180
+ * Dmitry Lihachev
181
+ * Lucas Souza
182
+ * Peter Kieltyka
183
+ * Rob Di Marco
184
+ * Magnus Bergmark
187
185
  * Jonathan Rochkind
188
186
  * Chris Beer
189
187
  * Craig Smith
@@ -6,7 +6,7 @@ module RSolr
6
6
 
7
7
  %W(Response Char Client Error Connection Uri Xml).each{|n|autoload n.to_sym, "rsolr/#{n.downcase}"}
8
8
 
9
- def self.version; "1.0.6" end
9
+ def self.version; "1.0.7" end
10
10
 
11
11
  VERSION = self.version
12
12
 
@@ -142,7 +142,7 @@ class RSolr::Client
142
142
  # "opts" : A hash, which can contain the following keys:
143
143
  # :method : required - the http method (:get, :post or :head)
144
144
  # :params : optional - the query string params in hash form
145
- # :data : optional - post data -- if a hash is given, it's sent as "application/x-www-form-urlencoded"
145
+ # :data : optional - post data -- if a hash is given, it's sent as "application/x-www-form-urlencoded; charset=UTF-8"
146
146
  # :headers : optional - hash of request headers
147
147
  # All other options are passed right along to the connection's +send_and_receive+ method (:get, :post, or :head)
148
148
  #
@@ -155,6 +155,9 @@ class RSolr::Client
155
155
  # then passes the request/response into +adapt_response+.
156
156
  def send_and_receive path, opts
157
157
  request_context = build_request path, opts
158
+ [:open_timeout, :read_timeout].each do |k|
159
+ request_context[k] = @options[k]
160
+ end
158
161
  execute request_context
159
162
  end
160
163
 
@@ -190,7 +193,7 @@ class RSolr::Client
190
193
  if opts[:data].is_a? Hash
191
194
  opts[:data] = RSolr::Uri.params_to_solr opts[:data]
192
195
  opts[:headers] ||= {}
193
- opts[:headers]['Content-Type'] ||= 'application/x-www-form-urlencoded'
196
+ opts[:headers]['Content-Type'] ||= 'application/x-www-form-urlencoded; charset=UTF-8'
194
197
  end
195
198
  opts[:path] = path
196
199
  opts[:uri] = base_uri.merge(path.to_s + (query ? "?#{query}" : "")) if base_uri
@@ -8,7 +8,7 @@ class RSolr::Connection
8
8
  # send a request,
9
9
  # then return the standard rsolr response hash {:status, :body, :headers}
10
10
  def execute client, request_context
11
- h = http request_context[:uri], request_context[:proxy]
11
+ h = http request_context[:uri], request_context[:proxy], request_context[:read_timeout], request_context[:open_timeout]
12
12
  request = setup_raw_request request_context
13
13
  request.body = request_context[:data] if request_context[:method] == :post and request_context[:data]
14
14
  begin
@@ -26,7 +26,7 @@ class RSolr::Connection
26
26
  protected
27
27
 
28
28
  # This returns a singleton of a Net::HTTP or Net::HTTP.Proxy request object.
29
- def http uri, proxy = nil
29
+ def http uri, proxy = nil, read_timeout = nil, open_timeout = nil
30
30
  @http ||= (
31
31
  http = if proxy
32
32
  proxy_user, proxy_pass = proxy.userinfo.split(/:/) if proxy.userinfo
@@ -35,6 +35,8 @@ class RSolr::Connection
35
35
  Net::HTTP.new uri.host, uri.port
36
36
  end
37
37
  http.use_ssl = uri.port == 443 || uri.instance_of?(URI::HTTPS)
38
+ http.read_timeout = read_timeout if read_timeout
39
+ http.open_timeout = open_timeout if open_timeout
38
40
  http
39
41
  )
40
42
  end
@@ -8,7 +8,17 @@ Gem::Specification.new do |s|
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
10
  s.version = RSolr.version
11
- s.authors = ["Matt Mitchell", "Jeremy Hinegardner", "Mat Brown", "Mike Perham", "Nathan Witmer", "Peter Kieltyka", "Randy Souza", "shairon toledo", "shima", "Chris Beer", "Jonathan Rochkind"]
11
+ s.authors = ["Antoine Latter", "Dmitry Lihachev",
12
+ "Lucas Souza", "Peter Kieltyka",
13
+ "Rob Di Marco", "Magnus Bergmark",
14
+ "Jonathan Rochkind", "Chris Beer",
15
+ "Craig Smith", "Randy Souza",
16
+ "Colin Steele", "Peter Kieltyka",
17
+ "Lorenzo Riccucci", "Mike Perham",
18
+ "Mat Brown", "Shairon Toledo",
19
+ "Matthew Rudy", "Fouad Mardini",
20
+ "Jeremy Hinegardner", "Nathan Witmer",
21
+ "\"shima\""]
12
22
  s.email = ["goodieboy@gmail.com"]
13
23
  s.homepage = "https://github.com/mwmitchell/rsolr"
14
24
  s.rubyforge_project = "rsolr"
@@ -5,7 +5,7 @@ describe "RSolr::Client" do
5
5
  def client
6
6
  @client ||= (
7
7
  connection = RSolr::Connection.new
8
- RSolr::Client.new connection, :url => "http://localhost:9999/solr"
8
+ RSolr::Client.new connection, :url => "http://localhost:9999/solr", :read_timeout => 42, :open_timeout=>43
9
9
  )
10
10
  end
11
11
  end
@@ -25,6 +25,13 @@ describe "RSolr::Client" do
25
25
  client.send_and_receive '', :method => meth, :params => {}, :data => nil, :headers => {}
26
26
  end
27
27
  end
28
+
29
+ it "should be timeout aware" do
30
+ [:get, :post, :head].each do |meth|
31
+ client.connection.should_receive(:execute).with(client, hash_including(:read_timeout => 42, :open_timeout=>43))
32
+ client.send_and_receive '', :method => meth, :params => {}, :data => nil, :headers => {}
33
+ end
34
+ end
28
35
  end
29
36
 
30
37
  context "post" do
@@ -197,7 +204,7 @@ describe "RSolr::Client" do
197
204
  result[:headers].should == {}
198
205
  end
199
206
 
200
- it "should set the Content-Type header to application/x-www-form-urlencoded if a hash is passed in to the data arg" do
207
+ it "should set the Content-Type header to application/x-www-form-urlencoded; charset=UTF-8 if a hash is passed in to the data arg" do
201
208
  result = client.build_request('select',
202
209
  :method => :post,
203
210
  :data => {:q=>'test', :fq=>[0,1]},
@@ -208,9 +215,9 @@ describe "RSolr::Client" do
208
215
  result[:data].should match pattern
209
216
  end
210
217
  result[:data].should_not match /wt=ruby/
211
- result[:headers].should == {"Content-Type" => "application/x-www-form-urlencoded"}
218
+ result[:headers].should == {"Content-Type" => "application/x-www-form-urlencoded; charset=UTF-8"}
212
219
  end
213
220
 
214
221
  end
215
222
 
216
- end
223
+ end
@@ -11,5 +11,41 @@ describe "RSolr::Connection" do
11
11
  req.each_header{|k,v| headers[k] = v}
12
12
  headers.should == {"content-type"=>"text/xml"}
13
13
  end
14
+
15
+ context "read timeout configuration" do
16
+ let(:client) { mock.as_null_object }
17
+
18
+ subject { RSolr::Connection.new }
19
+
20
+ it "should configure Net:HTTP read_timeout" do
21
+ subject.execute client, {:uri => URI.parse("http://localhost/some_uri"), :method => :get, :read_timeout => 42}
22
+ http = subject.instance_variable_get(:@http)
23
+ http.read_timeout.should == 42
24
+ end
25
+
26
+ it "should use Net:HTTP default read_timeout if not specified" do
27
+ subject.execute client, {:uri => URI.parse("http://localhost/some_uri"), :method => :get}
28
+ http = subject.instance_variable_get(:@http)
29
+ http.read_timeout.should == 60
30
+ end
31
+ end
32
+
33
+ context "open timeout configuration" do
34
+ let(:client) { mock.as_null_object }
35
+
36
+ subject { RSolr::Connection.new }
37
+
38
+ it "should configure Net:HTTP open_timeout" do
39
+ subject.execute client, {:uri => URI.parse("http://localhost/some_uri"), :method => :get, :open_timeout => 42}
40
+ http = subject.instance_variable_get(:@http)
41
+ http.open_timeout.should == 42
42
+ end
43
+
44
+ it "should use Net:HTTP default open_timeout if not specified" do
45
+ subject.execute client, {:uri => URI.parse("http://localhost/some_uri"), :method => :get}
46
+ http = subject.instance_variable_get(:@http)
47
+ http.open_timeout.should == nil
48
+ end
49
+ end
14
50
 
15
- end
51
+ end
metadata CHANGED
@@ -1,29 +1,39 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rsolr
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.6
4
+ version: 1.0.7
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
8
- - Matt Mitchell
9
- - Jeremy Hinegardner
10
- - Mat Brown
11
- - Mike Perham
12
- - Nathan Witmer
8
+ - Antoine Latter
9
+ - Dmitry Lihachev
10
+ - Lucas Souza
13
11
  - Peter Kieltyka
14
- - Randy Souza
15
- - shairon toledo
16
- - shima
17
- - Chris Beer
12
+ - Rob Di Marco
13
+ - Magnus Bergmark
18
14
  - Jonathan Rochkind
15
+ - Chris Beer
16
+ - Craig Smith
17
+ - Randy Souza
18
+ - Colin Steele
19
+ - Peter Kieltyka
20
+ - Lorenzo Riccucci
21
+ - Mike Perham
22
+ - Mat Brown
23
+ - Shairon Toledo
24
+ - Matthew Rudy
25
+ - Fouad Mardini
26
+ - Jeremy Hinegardner
27
+ - Nathan Witmer
28
+ - ! '"shima"'
19
29
  autorequire:
20
30
  bindir: bin
21
31
  cert_chain: []
22
- date: 2011-11-26 00:00:00.000000000Z
32
+ date: 2012-02-12 00:00:00.000000000Z
23
33
  dependencies:
24
34
  - !ruby/object:Gem::Dependency
25
35
  name: builder
26
- requirement: &70159987765860 !ruby/object:Gem::Requirement
36
+ requirement: &70108731684080 !ruby/object:Gem::Requirement
27
37
  none: false
28
38
  requirements:
29
39
  - - ! '>='
@@ -31,10 +41,10 @@ dependencies:
31
41
  version: 2.1.2
32
42
  type: :runtime
33
43
  prerelease: false
34
- version_requirements: *70159987765860
44
+ version_requirements: *70108731684080
35
45
  - !ruby/object:Gem::Dependency
36
46
  name: rake
37
- requirement: &70159987765360 !ruby/object:Gem::Requirement
47
+ requirement: &70108731667240 !ruby/object:Gem::Requirement
38
48
  none: false
39
49
  requirements:
40
50
  - - ~>
@@ -42,10 +52,10 @@ dependencies:
42
52
  version: 0.9.2
43
53
  type: :development
44
54
  prerelease: false
45
- version_requirements: *70159987765360
55
+ version_requirements: *70108731667240
46
56
  - !ruby/object:Gem::Dependency
47
57
  name: rdoc
48
- requirement: &70159987764860 !ruby/object:Gem::Requirement
58
+ requirement: &70108731666080 !ruby/object:Gem::Requirement
49
59
  none: false
50
60
  requirements:
51
61
  - - ~>
@@ -53,10 +63,10 @@ dependencies:
53
63
  version: 3.9.4
54
64
  type: :development
55
65
  prerelease: false
56
- version_requirements: *70159987764860
66
+ version_requirements: *70108731666080
57
67
  - !ruby/object:Gem::Dependency
58
68
  name: rspec
59
- requirement: &70159987764380 !ruby/object:Gem::Requirement
69
+ requirement: &70108731665120 !ruby/object:Gem::Requirement
60
70
  none: false
61
71
  requirements:
62
72
  - - ~>
@@ -64,7 +74,7 @@ dependencies:
64
74
  version: 2.6.0
65
75
  type: :development
66
76
  prerelease: false
67
- version_requirements: *70159987764380
77
+ version_requirements: *70108731665120
68
78
  description: RSolr aims to provide a simple and extensible library for working with
69
79
  Solr
70
80
  email:
@@ -113,12 +123,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
113
123
  - - ! '>='
114
124
  - !ruby/object:Gem::Version
115
125
  version: '0'
126
+ segments:
127
+ - 0
128
+ hash: -700646824116965374
116
129
  required_rubygems_version: !ruby/object:Gem::Requirement
117
130
  none: false
118
131
  requirements:
119
132
  - - ! '>='
120
133
  - !ruby/object:Gem::Version
121
134
  version: '0'
135
+ segments:
136
+ - 0
137
+ hash: -700646824116965374
122
138
  requirements: []
123
139
  rubyforge_project: rsolr
124
140
  rubygems_version: 1.8.11