rsolr 1.0.10 → 1.0.11

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2c51404db922cb38d87d897879b80c175e6999fe
4
- data.tar.gz: 3c6ac7bf24da6216b288442fc10fc9e207941c00
3
+ metadata.gz: d605bb65e2fdbd7e99f9bd1890549408f304016e
4
+ data.tar.gz: 02b7f7e889860627575f10e55b6fe73c9c73663c
5
5
  SHA512:
6
- metadata.gz: 3ad642cbdd3f948e7f372dbcc75f0e63ae4b011678f2d2b7730f40f378b4298814dbea5fe5a32044317c6537f4eed07064cc1b0e68e429b21bf720bc4ff15e2f
7
- data.tar.gz: a3c3283fb33be2db71b9195d5f177075673b819ea5f20e163d0ae69af8b2b7fcfb66f4411edb245f381f3832c8cd4ab8e692e0c01480cb284b10d411d82eafb6
6
+ metadata.gz: 656df9328215c9dba8d747baa7faff8b47a7b6a0fb5a8a46cb0246a7967ea7ecee78f5f59076396ddd463fd4413f8d54a7efc914df59c64c614a13fe396f1763
7
+ data.tar.gz: 8efa618685448b35cc7da82c6ec0576b17838bddc4924fb70ac07529afc2075754f9231697b221c42f0fe418010332ddce050236a4d16d1bf0b994d7855975cb
data/.travis.yml CHANGED
@@ -1,4 +1,5 @@
1
1
  rvm:
2
+ - 2.2.0
2
3
  - 2.1.0
3
4
  - 2.0.0
4
5
  - 1.9.3
data/CHANGES.txt CHANGED
@@ -1,3 +1,17 @@
1
+ 1.0.11
2
+ - add RSolr.solr_escape method and add deprecation messages to RSolr.escape (ndushay)
3
+ - use stdlib URI.escape methods instead of homegrown in RSolr::URI (ndushay)
4
+ - fix bug with Rsolr::Uri.create adding trailing slash if query params (ndushay)
5
+ - update rake tasks (cbeer)
6
+ - add Ruby 2.2.0 to travis ci build (ndushay)
7
+ - Housekeeping (badges to README, license in gemspec, correct url in gemspec ...) (ndushay)
8
+ - Improve rdoc styling (udaykadaboina)
9
+ - Support setting default_wt per connection via its options. (jcoleman)
10
+ - eliminates the usage of per-instance `extend` (jcoleman)
11
+ - Upgrade to RSpec 3 (blackwinter, adamjonas, cbeer)
12
+ - Fixed RSolr::Error to_s (PofMagicfingers)
13
+ 1.0.10 xxx
14
+
1
15
  1.0.8
2
16
  - Fix connection refused errors in specs + add basic auth support (Denis Goeury)
3
17
  - Ability to set :retry_503, the number of retry attempts for a 503 response
data/Gemfile CHANGED
@@ -4,16 +4,6 @@ gemspec
4
4
 
5
5
  gem "builder", ">= 2.1.2"
6
6
 
7
- group :development do
8
- gem "rake", ">= 0.9.2"
9
- gem "rdoc", ">= 3.9"
10
- end
11
-
12
- group :test do
13
- gem "rake", ">= 0.9.2"
14
- gem "rspec", "~> 2.6"
15
- end
16
-
17
7
  if defined? RUBY_VERSION and RUBY_VERSION < "1.9"
18
8
  gem 'nokogiri', "< 1.6"
19
- end
9
+ end
data/README.rdoc CHANGED
@@ -1,12 +1,14 @@
1
1
  =RSolr
2
+ {<img src="https://travis-ci.org/rsolr/rsolr.svg?branch=master" alt="Build Status" />}[https://travis-ci.org/rsolr/rsolr] {<img src="https://badge.fury.io/rb/rsolr.svg" alt="Gem Version" />}[http://badge.fury.io/rb/rsolr]
3
+
2
4
 
3
5
  A simple, extensible Ruby client for Apache Solr.
4
6
 
5
7
  ==Documentation
6
- The code docs for the last *release* can be viewed here: http://rubydoc.info/gems/rsolr/1.0.6/frames
8
+ The code docs http://www.rubydoc.info/gems/rsolr
7
9
 
8
10
  == Installation:
9
- sudo gem install rsolr
11
+ gem install rsolr
10
12
 
11
13
  == Example:
12
14
  require 'rubygems'
@@ -24,22 +26,22 @@ The code docs for the last *release* can be viewed here: http://rubydoc.info/gem
24
26
  # send a request to /catalog
25
27
  response = solr.get 'catalog', :params => {:q => '*:*'}
26
28
 
27
- When the Solr :wt is :ruby, then the response will be a Hash. This Hash is the same object returned by Solr, but evaluated as Ruby. If the :wt is not :ruby, then the response will be a String.
29
+ When the Solr +:wt+ is +:ruby+, then the response will be a Hash. This Hash is the same object returned by Solr, but evaluated as Ruby. If the +:wt+ is not +:ruby+, then the response will be a String.
28
30
 
29
- The response also exposes 2 attribute readers (for any :wt value), :request and :response. Both are Hash objects with symbolized keys.
31
+ The response also exposes 2 attribute readers (for any +:wt+ value), +:request+ and +:response+. Both are Hash objects with symbolized keys.
30
32
 
31
- The :request attribute contains the original request context. You can use this for debugging or logging. Some of the keys this object contains are :uri, :query, :method etc..
33
+ The +:request+ attribute contains the original request context. You can use this for debugging or logging. Some of the keys this object contains are +:uri+, +:query+, +:method+ etc..
32
34
 
33
- The :response attribute contains the original response. This object contains the :status, :body and :headers keys.
35
+ The +:response+ attribute contains the original response. This object contains the +:status+, +:body+ and +:headers+ keys.
34
36
 
35
37
  == Timeouts
36
38
  The read and connect timeout settings can be set when creating a new instance of RSolr:
37
39
  solr = RSolr.connect(:read_timeout => 120, :open_timeout => 120)
38
40
 
39
41
  == Retry 503s
40
- A 503 is usually a temporary error which RSolr may retry if requested. You may specify the number of retry attempts with the :retry_503 option.
42
+ A 503 is usually a temporary error which RSolr may retry if requested. You may specify the number of retry attempts with the +:retry_503+ option.
41
43
 
42
- Only requests which specify a Retry-After header will be retried, after waiting the indicated retry interval, otherwise RSolr will treat the request as a 500. You may specify a maximum Retry-After interval to wait with the :retry_after_limit option (default: one second).
44
+ Only requests which specify a Retry-After header will be retried, after waiting the indicated retry interval, otherwise RSolr will treat the request as a 500. You may specify a maximum Retry-After interval to wait with the +:retry_after_limit+ option (default: one second).
43
45
  solr = RSolr.connect(:retry_503 => 1, :retry_after_limit => 1)
44
46
 
45
47
 
@@ -52,7 +54,7 @@ Use the #get / #post method to send search requests to the /select handler:
52
54
  }
53
55
  response["response"]["docs"].each{|doc| puts doc["id"] }
54
56
 
55
- The :params sent into the method are sent to Solr as-is, which is to say they are converted to Solr url style, but no special mapping is used.
57
+ The +:params+ sent into the method are sent to Solr as-is, which is to say they are converted to Solr url style, but no special mapping is used.
56
58
  When an array is used, multiple parameters *with the same name* are generated for the Solr query. Example:
57
59
 
58
60
  solr.get 'select', :params => {:q=>'roses', :fq=>['red', 'violet']}
@@ -71,7 +73,7 @@ The paginate method returns WillPaginate ready "docs" objects, so for example in
71
73
  <%= will_paginate @solr_response["response"]["docs"] %>
72
74
 
73
75
  ===Method Missing
74
- The RSolr::Client class also uses method_missing for setting the request handler/path:
76
+ The +RSolr::Client+ class also uses +method_missing+ for setting the request handler/path:
75
77
 
76
78
  solr.paintings :params => {:q=>'roses', :fq=>['red', 'violet']}
77
79
 
@@ -86,7 +88,7 @@ This works with pagination as well:
86
88
  There may be cases where the query string is too long for a GET request. RSolr solves this issue by converting hash objects into form-encoded strings:
87
89
  response = solr.music :data => {:q => "*:*"}
88
90
 
89
- The :data hash is serialized as a form-encoded query string, and the correct content-type headers are sent along to Solr.
91
+ The +:data+ hash is serialized as a form-encoded query string, and the correct content-type headers are sent along to Solr.
90
92
 
91
93
  ===Sending HEAD Requests
92
94
  There may be cases where you'd like to send a HEAD request to Solr:
@@ -94,11 +96,11 @@ There may be cases where you'd like to send a HEAD request to Solr:
94
96
 
95
97
  ==Sending HTTP Headers
96
98
  Solr responds to the request headers listed here: http://wiki.apache.org/solr/SolrAndHTTPCaches
97
- To send header information to Solr using RSolr, just use the :headers option:
99
+ To send header information to Solr using RSolr, just use the +:headers+ option:
98
100
  response = solr.head "admin/ping", :headers => {"Cache-Control" => "If-None-Match"}
99
101
 
100
102
  ===Building a Request
101
- RSolr::Client provides a method for building a request context, which can be useful for debugging or logging etc.:
103
+ +RSolr::Client+ provides a method for building a request context, which can be useful for debugging or logging etc.:
102
104
  request_context = solr.build_request "select", :data => {:q => "*:*"}, :method => :post, :headers => {}
103
105
 
104
106
  To build a paginated request use build_paginated_request:
@@ -114,7 +116,7 @@ Multiple documents via #add
114
116
  documents = [{:id=>1, :price=>1.00}, {:id=>2, :price=>10.50}]
115
117
  solr.add documents
116
118
 
117
- The optional :add_attributes hash can also be used to set Solr "add" document attributes:
119
+ The optional +:add_attributes+ hash can also be used to set Solr "add" document attributes:
118
120
  solr.add documents, :add_attributes => {:commitWithin => 10}
119
121
 
120
122
  Raw XML via #update
@@ -151,7 +153,7 @@ Delete by array of queries
151
153
  solr.optimize, :optimize_attributes => {}
152
154
 
153
155
  == Response Formats
154
- The default response format is Ruby. When the :wt param is set to :ruby, the response is eval'd resulting in a Hash. You can get a raw response by setting the :wt to "ruby" - notice, the string -- not a symbol. RSolr will eval the Ruby string ONLY if the :wt value is :ruby. All other response formats are available as expected, :wt=>'xml' etc..
156
+ The default response format is Ruby. When the +:wt+ param is set to +:ruby+, the response is eval'd resulting in a Hash. You can get a raw response by setting the +:wt+ to +"ruby"+ - notice, the string -- not a symbol. RSolr will eval the Ruby string ONLY if the :wt value is :ruby. All other response formats are available as expected, +:wt=>'xml'+ etc..
155
157
 
156
158
  ===Evaluated Ruby (default)
157
159
  solr.get 'select', :params => {:wt => :ruby} # notice :ruby is a Symbol
@@ -197,6 +199,7 @@ The default response format is Ruby. When the :wt param is set to :ruby, the res
197
199
  * Lucas Souza
198
200
  * Dmitry Lihachev
199
201
  * Antoine Latter
202
+ * Naomi Dushay
200
203
 
201
204
  ==Author
202
205
 
data/Rakefile CHANGED
@@ -1,15 +1,6 @@
1
1
  require 'rake'
2
- require 'rake/testtask'
3
2
  require 'bundler/gem_tasks'
4
3
 
5
- require 'rubygems/package_task'
6
-
7
- ENV['RUBYOPT'] = '-W1'
8
-
9
- task :environment do
10
- require File.dirname(__FILE__) + '/lib/rsolr'
11
- end
12
-
13
4
  Dir['tasks/**/*.rake'].each { |t| load t }
14
5
 
15
- task :default => ['spec:api']
6
+ task :default => ['spec']
data/lib/rsolr/char.rb CHANGED
@@ -1,9 +1,12 @@
1
1
  # A module that contains (1) string related methods
2
+ # @deprecated remove this module when we remove the method (duh)
2
3
  module RSolr::Char
3
4
 
4
5
  # backslash everything
5
6
  # that isn't a word character
7
+ # @deprecated - this is incorrect Solr escaping
6
8
  def escape value
9
+ warn "[DEPRECATION] `RSolr.escape` is deprecated (and incorrect). Use `Rsolr.solr_escape` instead."
7
10
  value.gsub(/(\W)/, '\\\\\1')
8
11
  end
9
12
 
data/lib/rsolr/client.rb CHANGED
@@ -261,12 +261,7 @@ class RSolr::Client
261
261
  opts[:params]["rows"] = per_page
262
262
  build_request path, opts
263
263
  end
264
-
265
- # A mixin for used by #adapt_response
266
- module Context
267
- attr_accessor :request, :response
268
- end
269
-
264
+
270
265
  # This method will evaluate the :body value
271
266
  # if the params[:uri].params[:wt] == :ruby
272
267
  # ... otherwise, the body is returned as is.
@@ -288,13 +283,15 @@ class RSolr::Client
288
283
  response[:body]
289
284
  end
290
285
 
291
- result.extend Context
292
- result.request, result.response = request, response
293
- result.is_a?(Hash) ? result.extend(RSolr::Response) : result
286
+ if result.is_a?(Hash)
287
+ result = RSolr::HashWithResponse.new(request, response, result)
288
+ end
289
+
290
+ result
294
291
  end
295
-
292
+
296
293
  protected
297
-
294
+
298
295
  # converts the method name for the solr request handler path.
299
296
  def method_missing name, *args
300
297
  if name.to_s =~ /^paginated?_(.+)$/
@@ -330,6 +327,6 @@ class RSolr::Client
330
327
  end
331
328
 
332
329
  def default_wt
333
- self.class.default_wt
330
+ self.options[:default_wt] || self.class.default_wt
334
331
  end
335
332
  end
data/lib/rsolr/error.rb CHANGED
@@ -12,8 +12,8 @@ module RSolr::Error
12
12
  m << "\nError: #{details}\n" if details
13
13
  end
14
14
  p = "\nURI: #{request[:uri].to_s}"
15
- p = "\nRequest Headers: #{request[:headers].inspect}" if request[:headers]
16
- p = "\nRequest Data: #{request[:data].inspect}" if request[:data]
15
+ p << "\nRequest Headers: #{request[:headers].inspect}" if request[:headers]
16
+ p << "\nRequest Data: #{request[:data].inspect}" if request[:data]
17
17
  p << "\n"
18
18
  p << "\nBacktrace: " + self.backtrace[0..10].join("\n")
19
19
  m << p
@@ -1,26 +1,47 @@
1
1
  module RSolr::Response
2
-
3
- def self.extended base
4
- if base["response"] && base["response"]["docs"]
5
- base["response"]["docs"].tap do |d|
6
- d.extend PaginatedDocSet
7
- d.per_page = base.request[:params]["rows"]
8
- d.page_start = base.request[:params]["start"]
9
- d.page_total = base["response"]["numFound"].to_s.to_i
10
- end
2
+
3
+ def self.included(base)
4
+ unless base < Hash
5
+ raise ArgumentError, "RSolr::Response expects to included only in (sub)classes of Hash; got included in '#{base}' instead."
6
+ end
7
+ base.send(:attr_reader, :request, :response)
8
+ end
9
+
10
+ def initialize_rsolr_response(request, response, result)
11
+ @request = request
12
+ @response = response
13
+ self.merge!(result)
14
+ if self["response"] && self["response"]["docs"].is_a?(Array)
15
+ docs = PaginatedDocSet.new(self["response"]["docs"])
16
+ docs.per_page = request[:params]["rows"]
17
+ docs.page_start = request[:params]["start"]
18
+ docs.page_total = self["response"]["numFound"].to_s.to_i
19
+ self["response"]["docs"] = docs
11
20
  end
12
21
  end
13
-
22
+
14
23
  def with_indifferent_access
15
- if {}.respond_to?(:with_indifferent_access)
16
- super.extend RSolr::Response
24
+ if defined?(::RSolr::HashWithIndifferentAccessWithResponse)
25
+ ::RSolr::HashWithIndifferentAccessWithResponse.new(request, response, self)
17
26
  else
18
- raise NoMethodError, "undefined method `with_indifferent_access' for #{self.inspect}:#{self.class.name}"
27
+ if defined?(ActiveSupport::HashWithIndifferentAccess)
28
+ RSolr.const_set("HashWithIndifferentAccessWithResponse", Class.new(ActiveSupport::HashWithIndifferentAccess))
29
+ RSolr::HashWithIndifferentAccessWithResponse.class_eval <<-eos
30
+ include RSolr::Response
31
+ def initialize(request, response, result)
32
+ super()
33
+ initialize_rsolr_response(request, response, result)
34
+ end
35
+ eos
36
+ ::RSolr::HashWithIndifferentAccessWithResponse.new(request, response, self)
37
+ else
38
+ raise RuntimeError, "HashWithIndifferentAccess is not currently defined"
39
+ end
19
40
  end
20
41
  end
21
42
 
22
43
  # A response module which gets mixed into the solr ["response"]["docs"] array.
23
- module PaginatedDocSet
44
+ class PaginatedDocSet < Array
24
45
 
25
46
  attr_accessor :page_start, :per_page, :page_total
26
47
  if not (Object.const_defined?("RUBY_ENGINE") and Object::RUBY_ENGINE=='rbx')
@@ -61,5 +82,14 @@ module RSolr::Response
61
82
  end
62
83
 
63
84
  end
64
-
85
+
86
+ end
87
+
88
+ class RSolr::HashWithResponse < Hash
89
+ include RSolr::Response
90
+
91
+ def initialize(request, response, result)
92
+ super()
93
+ initialize_rsolr_response(request, response, result)
94
+ end
65
95
  end
data/lib/rsolr/uri.rb CHANGED
@@ -3,56 +3,73 @@ require 'uri'
3
3
  module RSolr::Uri
4
4
 
5
5
  def create url
6
- ::URI.parse url[-1] == ?/ ? url : "#{url}/"
6
+ ::URI.parse (url[-1] == '/' || URI.parse(url).query) ? url : "#{url}/"
7
7
  end
8
8
 
9
- # Returns a query string param pair as a string.
10
- # Both key and value are escaped.
11
- def build_param(k,v, escape = true)
12
- escape ?
13
- "#{escape_query_value(k)}=#{escape_query_value(v)}" :
14
- "#{k}=#{v}"
15
- end
16
-
17
- # Return the bytesize of String; uses String#size under Ruby 1.8 and
18
- # String#bytesize under 1.9.
19
- if ''.respond_to?(:bytesize)
20
- def bytesize(string)
21
- string.bytesize
22
- end
23
- else
24
- def bytesize(string)
25
- string.size
26
- end
27
- end
28
-
29
9
  # Creates a Solr based query string.
30
10
  # Keys that have arrays values are set multiple times:
31
11
  # params_to_solr(:q => 'query', :fq => ['a', 'b'])
32
12
  # is converted to:
33
13
  # ?q=query&fq=a&fq=b
14
+ # @param [boolean] escape false if no URI escaping is to be performed. Default true.
15
+ # @return [String] Solr query params as a String, suitable for use in a url
34
16
  def params_to_solr(params, escape = true)
17
+ return URI.encode_www_form(params.reject{|k,v| k.to_s.empty? || v.to_s.empty?}) if escape
18
+
19
+ # escape = false if we are here
35
20
  mapped = params.map do |k, v|
36
21
  next if v.to_s.empty?
37
22
  if v.class == Array
38
- params_to_solr(v.map { |x| [k, x] }, escape)
23
+ params_to_solr(v.map { |x| [k, x] }, false)
39
24
  else
40
- build_param k, v, escape
25
+ "#{k}=#{v}"
41
26
  end
42
27
  end
43
28
  mapped.compact.join("&")
44
29
  end
45
30
 
31
+ # Returns a query string param pair as a string.
32
+ # Both key and value are URI escaped, unless third param is false
33
+ # @param [boolean] escape false if no URI escaping is to be performed. Default true.
34
+ # @deprecated - used to be called from params_to_solr before 2015-02-25
35
+ def build_param(k, v, escape = true)
36
+ warn "[DEPRECATION] `RSolr::Uri.build_param` is deprecated. Use `URI.encode_www_form_component` or k=v instead."
37
+ escape ?
38
+ "#{URI.encode_www_form_component(k)}=#{URI.encode_www_form_component(v)}" :
39
+ "#{k}=#{v}"
40
+ end
41
+
42
+ # 2015-02 Deprecated: use URI.encode_www_form_component(s)
43
+ #
46
44
  # Performs URI escaping so that you can construct proper
47
45
  # query strings faster. Use this rather than the cgi.rb
48
46
  # version since it's faster.
49
47
  # (Stolen from Rack).
48
+ # http://www.rubydoc.info/github/rack/rack/URI.encode_www_form_component
49
+ # @deprecated
50
50
  def escape_query_value(s)
51
- s.to_s.gsub(/([^ a-zA-Z0-9_.-]+)/u) {
52
- '%'+$1.unpack('H2'*bytesize($1)).join('%').upcase
53
- }.tr(' ', '+')
51
+ warn "[DEPRECATION] `RSolr::Uri.escape_query_value` is deprecated. Use `URI.encode_www_form_component` instead."
52
+ URI.encode_www_form_component(s)
53
+ # s.to_s.gsub(/([^ a-zA-Z0-9_.-]+)/u) {
54
+ # '%'+$1.unpack('H2'*bytesize($1)).join('%').upcase
55
+ # }.tr(' ', '+')
54
56
  end
55
-
57
+
58
+ # Return the bytesize of String; uses String#size under Ruby 1.8 and
59
+ # String#bytesize under 1.9.
60
+ # @deprecated as bytesize was only used by escape_query_value which is itself deprecated
61
+ if ''.respond_to?(:bytesize)
62
+ def bytesize(string)
63
+ warn "[DEPRECATION] `RSolr::Uri.bytesize` is deprecated. Use String.bytesize"
64
+ string.bytesize
65
+ end
66
+ else
67
+ def bytesize(string)
68
+ warn "[DEPRECATION] `RSolr::Uri.bytesize` is deprecated. Use String.size"
69
+ string.size
70
+ end
71
+ end
72
+
56
73
  extend self
57
74
 
58
75
  end
data/lib/rsolr/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  module RSolr
2
- VERSION = "1.0.10"
2
+ VERSION = "1.0.11"
3
3
 
4
4
  def self.version
5
5
  VERSION
data/lib/rsolr.rb CHANGED
@@ -1,11 +1,6 @@
1
- $: << "#{File.dirname(__FILE__)}" unless $:.include? File.dirname(__FILE__)
2
-
3
- require 'rubygems'
4
- require 'rsolr/version'
5
-
6
1
  module RSolr
7
2
 
8
- %W(Response Char Client Error Connection Uri Xml).each{|n|autoload n.to_sym, "rsolr/#{n.downcase}"}
3
+ Dir.glob(File.expand_path("../rsolr/*.rb", __FILE__)).each{|rb_file| require(rb_file)}
9
4
 
10
5
  def self.connect *args
11
6
  driver = Class === args[0] ? args[0] : RSolr::Connection
@@ -13,7 +8,19 @@ module RSolr
13
8
  Client.new driver.new, opts
14
9
  end
15
10
 
16
- # RSolr.escape
11
+ # RSolr.escape, which is deprecated as of 2015-02
17
12
  extend Char
18
13
 
19
- end
14
+ # backslash escape characters that have special meaning to Solr query parser
15
+ # per http://lucene.apache.org/core/4_0_0/queryparser/org/apache/lucene/queryparser/classic/package-summary.html#Escaping_Special_Characters
16
+ # + - & | ! ( ) { } [ ] ^ " ~ * ? : \ /
17
+ # see also http://svn.apache.org/repos/asf/lucene/dev/tags/lucene_solr_4_9_1/solr/solrj/src/java/org/apache/solr/client/solrj/util/ClientUtils.java
18
+ # escapeQueryChars method
19
+ # @return [String] str with special chars preceded by a backslash
20
+ def self.solr_escape(str)
21
+ # note that the gsub will parse the escaped backslashes, as will the ruby code sending the query to Solr
22
+ # so the result sent to Solr is ultimately a single backslash in front of the particular character
23
+ str.gsub(/([+\-&|!\(\)\{\}\[\]\^"~\*\?:\\\/])/, '\\\\\1')
24
+ end
25
+
26
+ end
data/rsolr.gemspec CHANGED
@@ -18,9 +18,11 @@ Gem::Specification.new do |s|
18
18
  "Mat Brown", "Shairon Toledo",
19
19
  "Matthew Rudy", "Fouad Mardini",
20
20
  "Jeremy Hinegardner", "Nathan Witmer",
21
+ "Naomi Dushay",
21
22
  "\"shima\""]
22
23
  s.email = ["goodieboy@gmail.com"]
23
- s.homepage = "https://github.com/mwmitchell/rsolr"
24
+ s.license = 'Apache-2.0'
25
+ s.homepage = "https://github.com/rsolr/rsolr"
24
26
  s.rubyforge_project = "rsolr"
25
27
  s.files = `git ls-files`.split("\n")
26
28
  s.test_files = `git ls-files -- {spec}/*`.split("\n")
@@ -30,7 +32,7 @@ Gem::Specification.new do |s|
30
32
  s.add_dependency 'builder', '>= 2.1.2'
31
33
  s.add_development_dependency 'activesupport'
32
34
  s.add_development_dependency 'nokogiri', '>= 1.4.0'
33
- s.add_development_dependency 'rake', '~> 0.9.2'
34
- s.add_development_dependency 'rdoc', '~> 3.9.4'
35
- s.add_development_dependency 'rspec', '~> 2.6.0'
35
+ s.add_development_dependency 'rake', '~> 10.0'
36
+ s.add_development_dependency 'rdoc', '~> 4.0'
37
+ s.add_development_dependency 'rspec', '~> 3.0'
36
38
  end
@@ -1,18 +1,23 @@
1
1
  require 'spec_helper'
2
+ # @deprecated remove this module's specs when we remove the method (duh)
2
3
  describe "RSolr::Char" do
3
4
 
4
5
  let(:char){Object.new.extend RSolr::Char}
5
6
 
7
+ # deprecated as of 2015-02, as it is incorrect Solr escaping.
8
+ # instead, use RSolr.solr_escape
9
+ # commented out as it gives a mess of deprecation warnings
10
+ =begin
6
11
  it 'should escape everything that is not a word with \\' do
7
12
  (0..255).each do |ascii|
8
13
  chr = ascii.chr
9
14
  esc = char.escape(chr)
10
15
  if chr =~ /\W/
11
- esc.to_s.should == "\\#{chr}"
16
+ expect(esc.to_s).to eq("\\#{chr}")
12
17
  else
13
- esc.to_s.should == chr
18
+ expect(esc.to_s).to eq(chr)
14
19
  end
15
20
  end
16
21
  end
17
-
22
+ =end
18
23
  end