rsolr 1.1.2 → 2.0.0.pre1

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: e401f0dcdd04d8215eec9b67a1e7c775c41ac7f4
4
- data.tar.gz: 6e466531f33da1560869ce39586101dfc4bbb08e
3
+ metadata.gz: 6615cc15df2d2db90f952215c74c2c1215622f6d
4
+ data.tar.gz: 3b46e5c7953531a68c6dd596036f8b50d10c99d6
5
5
  SHA512:
6
- metadata.gz: 29a5ac0f898a33e2d8efc2a0b0b7ed618c169e63597dcc283573ae9302183f0ee983ec18e30d3c9dc100bb13e06ff86358d02ad0df91515101efc8a26f82b7f8
7
- data.tar.gz: 1a509a26c086ffbad2543154106584989d7c40d42b747a422a622ba77fe1dd87202373ae1cd8d10727a0b61b89ad16a5cfcdc5655375ebc7d4b5733d9fa7dcb0
6
+ metadata.gz: e4de23a7c03b4d3d81a765dd6be91abff61a6f8241bbe5a4e941df9d0c34855715fe077aa5d3b20d54c3e87781aa539a90cd6da8ba3e4cb9b87591c0523e59f7
7
+ data.tar.gz: d2ad073f1b1814b834facbeaa8268d803076645eae603ed751813fe73684d10172e26cec7d54d232e42e1d5052d159ec519f8be5fee5ec74ea2e309cd5bb37a7
data/.gitignore CHANGED
@@ -10,3 +10,4 @@ Gemfile.lock
10
10
 
11
11
  *.gem
12
12
  .bundle
13
+ /spec/examples.txt
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --require spec_helper
data/README.rdoc CHANGED
@@ -155,14 +155,13 @@ Delete by array of queries
155
155
  == Response Formats
156
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..
157
157
 
158
- ===Evaluated Ruby (default)
158
+ ===Evaluated Ruby:
159
159
  solr.get 'select', :params => {:wt => :ruby} # notice :ruby is a Symbol
160
- ===Raw Ruby
160
+ ===Raw Ruby:
161
161
  solr.get 'select', :params => {:wt => 'ruby'} # notice 'ruby' is a String
162
-
163
162
  ===XML:
164
163
  solr.get 'select', :params => {:wt => :xml}
165
- ===JSON:
164
+ ===JSON (default):
166
165
  solr.get 'select', :params => {:wt => :json}
167
166
 
168
167
  ==Related Resources & Projects
data/Rakefile CHANGED
@@ -1,6 +1,19 @@
1
- require 'rake'
2
1
  require 'bundler/gem_tasks'
3
2
 
4
- Dir['tasks/**/*.rake'].each { |t| load t }
3
+ task default: ['spec']
5
4
 
6
- task :default => ['spec']
5
+ require 'rspec/core/rake_task'
6
+
7
+ RSpec::Core::RakeTask.new(:spec)
8
+
9
+ # Rdoc
10
+ require 'rdoc/task'
11
+
12
+ desc 'Generate documentation for the rsolr gem.'
13
+ RDoc::Task.new(:doc) do |rdoc|
14
+ rdoc.rdoc_dir = 'doc'
15
+ rdoc.title = 'RSolr'
16
+ rdoc.options << '--line-numbers' << '--inline-source'
17
+ rdoc.rdoc_files.include('README.rdoc')
18
+ rdoc.rdoc_files.include('lib/**/*.rb')
19
+ end
data/lib/rsolr/char.rb CHANGED
@@ -1,24 +1,6 @@
1
- # A module that contains (1) string related methods
2
- # @deprecated remove this module when we remove the method (duh)
1
+ # :nodoc:
3
2
  module RSolr::Char
4
-
5
- # backslash everything
6
- # that isn't a word character
7
- # @deprecated - this is incorrect Solr escaping
8
- def escape value
9
- warn "[DEPRECATION] `RSolr.escape` is deprecated (and incorrect). Use `RSolr.solr_escape` instead."
10
- value.gsub(/(\W)/, '\\\\\1')
3
+ def self.included(*)
4
+ warn 'RSolr::Char is deprecated without replacement, and will be removed in RSolr 3.x'
11
5
  end
12
-
13
- # LUCENE_CHAR_RX = /([\+\-\!\(\)\[\]\^\"\~\*\?\:\\]+)/
14
- # LUCENE_WORD_RX = /(OR|AND|NOT)/
15
- #
16
- # # More specific/lucene escape sequence
17
- # def lucene_escape string
18
- # delim = " "
19
- # string.gsub(LUCENE_CHAR_RX, '\\\\\1').split(delim).map { |v|
20
- # v.gsub(LUCENE_WORD_RX, '\\\\\1')
21
- # }.join(delim)
22
- # end
23
-
24
6
  end
data/lib/rsolr/client.rb CHANGED
@@ -3,11 +3,13 @@ begin
3
3
  rescue LoadError
4
4
  end
5
5
 
6
+ require 'faraday'
7
+
6
8
  class RSolr::Client
7
9
 
8
10
  class << self
9
11
  def default_wt
10
- @default_wt || :ruby
12
+ @default_wt ||= :json
11
13
  end
12
14
 
13
15
  def default_wt= value
@@ -15,7 +17,7 @@ class RSolr::Client
15
17
  end
16
18
  end
17
19
 
18
- attr_reader :connection, :uri, :proxy, :options, :update_path
20
+ attr_reader :uri, :proxy, :options, :update_path
19
21
 
20
22
  def initialize connection, options = {}
21
23
  @proxy = @uri = nil
@@ -23,15 +25,16 @@ class RSolr::Client
23
25
  unless false === options[:url]
24
26
  url = options[:url] ? options[:url].dup : 'http://127.0.0.1:8983/solr/'
25
27
  url << "/" unless url[-1] == ?/
26
- @uri = RSolr::Uri.create url
28
+ @uri = ::URI.parse(url)
27
29
  if options[:proxy]
28
30
  proxy_url = options[:proxy].dup
29
31
  proxy_url << "/" unless proxy_url.nil? or proxy_url[-1] == ?/
30
- @proxy = RSolr::Uri.create proxy_url if proxy_url
32
+ @proxy = ::URI.parse proxy_url if proxy_url
31
33
  elsif options[:proxy] == false
32
34
  @proxy = false # used to avoid setting the proxy from the environment.
33
35
  end
34
36
  end
37
+ @update_format = options.delete(:update_format) || :json
35
38
  @update_path = options.fetch(:update_path, 'update')
36
39
  @options = options
37
40
  end
@@ -41,7 +44,7 @@ class RSolr::Client
41
44
  base_uri.request_uri if base_uri
42
45
  end
43
46
 
44
- # returns the RSolr::URI uri object.
47
+ # returns the URI uri object.
45
48
  def base_uri
46
49
  @uri
47
50
  end
@@ -80,11 +83,14 @@ class RSolr::Client
80
83
  #
81
84
  def update opts = {}
82
85
  opts[:headers] ||= {}
83
- opts[:headers]['Content-Type'] ||= 'text/xml'
86
+ if @update_format == :json
87
+ opts[:headers]['Content-Type'] ||= 'application/json'
88
+ else
89
+ opts[:headers]['Content-Type'] ||= 'text/xml'
90
+ end
84
91
  post opts.fetch(:path, update_path), opts
85
92
  end
86
93
 
87
- #
88
94
  # +add+ creates xml "add" documents and sends the xml data to the +update+ method
89
95
  #
90
96
  # http://wiki.apache.org/solr/UpdateXmlMessages#add.2BAC8-update
@@ -101,7 +107,7 @@ class RSolr::Client
101
107
  #
102
108
  def add doc, opts = {}
103
109
  add_attributes = opts.delete :add_attributes
104
- update opts.merge(:data => xml.add(doc, add_attributes))
110
+ update opts.merge(:data => builder.add(doc, add_attributes))
105
111
  end
106
112
 
107
113
  # send "commit" xml with opts
@@ -110,7 +116,7 @@ class RSolr::Client
110
116
  #
111
117
  def commit opts = {}
112
118
  commit_attrs = opts.delete :commit_attributes
113
- update opts.merge(:data => xml.commit( commit_attrs ))
119
+ update opts.merge(:data => builder.commit( commit_attrs ))
114
120
  end
115
121
 
116
122
  # send "optimize" xml with opts.
@@ -119,7 +125,7 @@ class RSolr::Client
119
125
  #
120
126
  def optimize opts = {}
121
127
  optimize_attributes = opts.delete :optimize_attributes
122
- update opts.merge(:data => xml.optimize(optimize_attributes))
128
+ update opts.merge(:data => builder.optimize(optimize_attributes))
123
129
  end
124
130
 
125
131
  # send </rollback>
@@ -128,14 +134,14 @@ class RSolr::Client
128
134
  #
129
135
  # NOTE: solr 1.4 only
130
136
  def rollback opts = {}
131
- update opts.merge(:data => xml.rollback)
137
+ update opts.merge(:data => builder.rollback)
132
138
  end
133
139
 
134
140
  # Delete one or many documents by id
135
141
  # solr.delete_by_id 10
136
142
  # solr.delete_by_id([12, 41, 199])
137
143
  def delete_by_id id, opts = {}
138
- update opts.merge(:data => xml.delete_by_id(id))
144
+ update opts.merge(:data => builder.delete_by_id(id))
139
145
  end
140
146
 
141
147
  # delete one or many documents by query.
@@ -145,14 +151,25 @@ class RSolr::Client
145
151
  # solr.delete_by_query 'available:0'
146
152
  # solr.delete_by_query ['quantity:0', 'manu:"FQ"']
147
153
  def delete_by_query query, opts = {}
148
- update opts.merge(:data => xml.delete_by_query(query))
154
+ update opts.merge(:data => builder.delete_by_query(query))
149
155
  end
150
156
 
157
+ def builder
158
+ if @update_format == :json
159
+ json
160
+ else
161
+ xml
162
+ end
163
+ end
151
164
  # shortcut to RSolr::Xml::Generator
152
165
  def xml
153
166
  @xml ||= RSolr::Xml::Generator.new
154
167
  end
155
168
 
169
+ def json
170
+ @json ||= RSolr::JSON::Generator.new
171
+ end
172
+
156
173
  # +send_and_receive+ is the main request method responsible for sending requests to the +connection+ object.
157
174
  #
158
175
  # "path" : A string value that usually represents a solr request handler
@@ -177,48 +194,21 @@ class RSolr::Client
177
194
 
178
195
  #
179
196
  def execute request_context
197
+ raw_response = begin
198
+ response = connection.send(request_context[:method], request_context[:uri].to_s) do |req|
199
+ req.body = request_context[:data] if request_context[:method] == :post and request_context[:data]
200
+ req.headers.merge!(request_context[:headers]) if request_context[:headers]
201
+ end
180
202
 
181
- raw_response = connection.execute self, request_context
182
-
183
- while retry_503?(request_context, raw_response)
184
- request_context[:retry_503] -= 1
185
- sleep retry_after(raw_response)
186
- raw_response = connection.execute self, request_context
203
+ { status: response.status.to_i, headers: response.headers, body: response.body.force_encoding('utf-8') }
204
+ rescue Faraday::ClientError => e
205
+ raise RSolr::Error::Http.new(request_context, e.response)
206
+ rescue Errno::ECONNREFUSED
207
+ raise RSolr::Error::ConnectionRefused, request_context.inspect
187
208
  end
188
-
189
209
  adapt_response(request_context, raw_response) unless raw_response.nil?
190
210
  end
191
211
 
192
- def retry_503?(request_context, response)
193
- return false if response.nil?
194
- status = response[:status] && response[:status].to_i
195
- return false unless status == 503
196
- retry_503 = request_context[:retry_503]
197
- return false unless retry_503 && retry_503 > 0
198
- retry_after_limit = request_context[:retry_after_limit] || 1
199
- retry_after = retry_after(response)
200
- return false unless retry_after && retry_after <= retry_after_limit
201
- true
202
- end
203
-
204
- # Retry-After can be a relative number of seconds from now, or an RFC 1123 Date.
205
- # If the latter, attempt to convert it to a relative time in seconds.
206
- def retry_after(response)
207
- retry_after = Array(response[:headers]['Retry-After'] || response[:headers]['retry-after']).flatten.first.to_s
208
- if retry_after =~ /\A[0-9]+\Z/
209
- retry_after = retry_after.to_i
210
- else
211
- begin
212
- retry_after_date = DateTime.parse(retry_after)
213
- retry_after = retry_after_date.to_time - Time.now
214
- retry_after = nil if retry_after < 0
215
- rescue ArgumentError
216
- retry_after = retry_after.to_i
217
- end
218
- end
219
- retry_after
220
- end
221
-
222
212
  # +build_request+ accepts a path and options hash,
223
213
  # then prepares a normalized hash to return for sending
224
214
  # to a solr connection driver.
@@ -250,10 +240,6 @@ class RSolr::Client
250
240
  opts[:path] = path
251
241
  opts[:uri] = base_uri.merge(path.to_s + (query ? "?#{query}" : "")) if base_uri
252
242
 
253
- [:open_timeout, :read_timeout, :retry_503, :retry_after_limit].each do |k|
254
- opts[k] = @options[k]
255
- end
256
-
257
243
  opts
258
244
  end
259
245
 
@@ -285,7 +271,6 @@ class RSolr::Client
285
271
  def adapt_response request, response
286
272
  raise "The response does not have the correct keys => :body, :headers, :status" unless
287
273
  %W(body headers status) == response.keys.map{|k|k.to_s}.sort
288
- raise RSolr::Error::Http.new request, response unless [200,302].include? response[:status]
289
274
 
290
275
  result = if respond_to? "evaluate_#{request[:params][:wt]}_response", true
291
276
  send "evaluate_#{request[:params][:wt]}_response", request, response
@@ -299,6 +284,25 @@ class RSolr::Client
299
284
 
300
285
  result
301
286
  end
287
+
288
+ def connection
289
+ @connection ||= begin
290
+ conn_opts = { request: {} }
291
+ conn_opts[:proxy] = proxy if proxy
292
+ conn_opts[:request][:open_timeout] = options[:open_timeout] if options[:open_timeout]
293
+ conn_opts[:request][:timeout] = options[:read_timeout] if options[:read_timeout]
294
+ conn_opts[:request][:params_encoder] = Faraday::FlatParamsEncoder
295
+
296
+ Faraday.new(conn_opts) do |conn|
297
+ conn.basic_auth(uri.user, uri.password) if uri.user && uri.password
298
+ conn.response :raise_error
299
+ conn.request :retry, max: options[:retry_after_limit], interval: 0.05,
300
+ interval_randomness: 0.5, backoff_factor: 2,
301
+ exceptions: ['Faraday::Error', 'Timeout::Error'] if options[:retry_503]
302
+ conn.adapter options[:adapter] || Faraday.default_adapter
303
+ end
304
+ end
305
+ end
302
306
 
303
307
  protected
304
308
 
@@ -319,21 +323,17 @@ class RSolr::Client
319
323
  # instead, giving full access to the
320
324
  # request/response objects.
321
325
  def evaluate_ruby_response request, response
322
- begin
323
- Kernel.eval response[:body].to_s
324
- rescue SyntaxError
325
- raise RSolr::Error::InvalidRubyResponse.new request, response
326
- end
326
+ Kernel.eval response[:body].to_s
327
+ rescue SyntaxError
328
+ raise RSolr::Error::InvalidRubyResponse.new request, response
327
329
  end
328
330
 
329
331
  def evaluate_json_response request, response
330
- return response[:body] unless defined? JSON
332
+ return if response[:body].nil? || response[:body].empty?
331
333
 
332
- begin
333
- JSON.parse response[:body].to_s
334
- rescue JSON::ParserError
335
- raise RSolr::Error::InvalidJsonResponse.new request, response
336
- end
334
+ JSON.parse response[:body].to_s
335
+ rescue JSON::ParserError
336
+ raise RSolr::Error::InvalidJsonResponse.new request, response
337
337
  end
338
338
 
339
339
  def default_wt
@@ -0,0 +1,161 @@
1
+ module RSolr
2
+ class Document
3
+ CHILD_DOCUMENT_KEY = '_childDocuments_'.freeze
4
+
5
+ # "attrs" is a hash for setting the "doc" xml attributes
6
+ # "fields" is an array of Field objects
7
+ attr_accessor :attrs, :fields
8
+
9
+ # "doc_hash" must be a Hash/Mash object
10
+ # If a value in the "doc_hash" is an array,
11
+ # a field object is created for each value...
12
+ def initialize(doc_hash = {})
13
+ @fields = []
14
+ doc_hash.each_pair do |field, values|
15
+ add_field(field, values)
16
+ end
17
+ @attrs={}
18
+ end
19
+
20
+ # returns an array of fields that match the "name" arg
21
+ def fields_by_name(name)
22
+ @fields.select{|f|f.name==name}
23
+ end
24
+
25
+ # returns the *first* field that matches the "name" arg
26
+ def field_by_name(name)
27
+ @fields.detect{|f|f.name==name}
28
+ end
29
+
30
+ #
31
+ # Add a field value to the document. Options map directly to
32
+ # XML attributes in the Solr <field> node.
33
+ # See http://wiki.apache.org/solr/UpdateXmlMessages#head-8315b8028923d028950ff750a57ee22cbf7977c6
34
+ #
35
+ # === Example:
36
+ #
37
+ # document.add_field('title', 'A Title', :boost => 2.0)
38
+ #
39
+ def add_field(name, values, options = {})
40
+ wrap(values).each do |v|
41
+ next if v.nil?
42
+
43
+ field_attrs = { name: name }
44
+ field_attrs[:type] = DocumentField if name.to_s == CHILD_DOCUMENT_KEY
45
+
46
+ @fields << RSolr::Field.instance(options.merge(field_attrs), v)
47
+ end
48
+ end
49
+
50
+ def as_json
51
+ @fields.group_by(&:name).each_with_object({}) do |(field, values), result|
52
+ v = values.map(&:as_json)
53
+ v = v.first if v.length == 1
54
+ result[field] = v
55
+ end
56
+ end
57
+
58
+ private
59
+
60
+ def wrap(object)
61
+ if object.nil?
62
+ []
63
+ elsif object.respond_to?(:to_ary)
64
+ object.to_ary || [object]
65
+ elsif object.is_a? Hash
66
+ [object]
67
+ elsif object.is_a? Enumerable
68
+ object
69
+ else
70
+ [object]
71
+ end
72
+ end
73
+ end
74
+
75
+ class Field
76
+
77
+ def self.instance(attrs, value)
78
+ attrs = attrs.dup
79
+ field_type = attrs.delete(:type) { value.class.name }
80
+
81
+ klass = if field_type.is_a? String
82
+ class_for_field(field_type)
83
+ elsif field_type.is_a? Class
84
+ field_type
85
+ else
86
+ self
87
+ end
88
+
89
+ klass.new(attrs, value)
90
+ end
91
+
92
+ def self.class_for_field(field_type)
93
+ potential_class_name = field_type + 'Field'.freeze
94
+ search_scope = Module.nesting[1]
95
+ search_scope.const_defined?(potential_class_name, false) ? search_scope.const_get(potential_class_name) : self
96
+ end
97
+ private_class_method :class_for_field
98
+
99
+ # "attrs" is a hash for setting the "doc" xml attributes
100
+ # "value" is the text value for the node
101
+ attr_accessor :attrs, :source_value
102
+
103
+ # "attrs" must be a hash
104
+ # "value" should be something that responds to #_to_s
105
+ def initialize(attrs, source_value)
106
+ @attrs = attrs
107
+ @source_value = source_value
108
+ end
109
+
110
+ # the value of the "name" attribute
111
+ def name
112
+ attrs[:name]
113
+ end
114
+
115
+ def value
116
+ source_value
117
+ end
118
+
119
+ def as_json
120
+ if attrs[:update]
121
+ { attrs[:update] => value }
122
+ elsif attrs.any? { |k, _| k != :name }
123
+ hash = attrs.dup
124
+ hash.delete(:name)
125
+ hash.merge(value: value)
126
+ else
127
+ value
128
+ end
129
+ end
130
+ end
131
+
132
+ class DateField < Field
133
+ def value
134
+ Time.utc(source_value.year, source_value.mon, source_value.mday).iso8601
135
+ end
136
+ end
137
+
138
+ class TimeField < Field
139
+ def value
140
+ source_value.getutc.strftime('%FT%TZ')
141
+ end
142
+ end
143
+
144
+ class DateTimeField < Field
145
+ def value
146
+ source_value.to_time.getutc.iso8601
147
+ end
148
+ end
149
+
150
+ class DocumentField < Field
151
+ def value
152
+ return RSolr::Document.new(source_value) if source_value.respond_to? :each_pair
153
+
154
+ super
155
+ end
156
+
157
+ def as_json
158
+ value.as_json
159
+ end
160
+ end
161
+ end
data/lib/rsolr/json.rb ADDED
@@ -0,0 +1,52 @@
1
+ module RSolr::JSON
2
+ class Generator
3
+ def add data, add_attrs = {}
4
+ add_attrs ||= {}
5
+ data = [data] unless data.is_a?(Array)
6
+
7
+ if add_attrs.empty? && data.none? { |doc| doc.is_a?(RSolr::Document) && !doc.attrs.empty? }
8
+ data.map do |doc|
9
+ doc = RSolr::Document.new(doc) if doc.respond_to?(:each_pair)
10
+ yield doc if block_given?
11
+ doc.as_json
12
+ end.to_json
13
+ else
14
+ i = 0
15
+ data.each_with_object({}) do |doc, hash|
16
+ doc = RSolr::Document.new(doc) if doc.respond_to?(:each_pair)
17
+ yield doc if block_given?
18
+ hash["add__UNIQUE_RSOLR_SUFFIX_#{i += 1}"] = add_attrs.merge(doc.attrs).merge(doc: doc.as_json)
19
+ end.to_json.gsub(/__UNIQUE_RSOLR_SUFFIX_\d+/, '')
20
+ end
21
+ end
22
+
23
+ # generates a commit message
24
+ def commit(opts = {})
25
+ opts ||= {}
26
+ { commit: opts }.to_json
27
+ end
28
+
29
+ # generates a optimize message
30
+ def optimize(opts = {})
31
+ opts ||= {}
32
+ { optimize: opts }.to_json
33
+ end
34
+
35
+ # generates a rollback message
36
+ def rollback
37
+ { rollback: {} }.to_json
38
+ end
39
+
40
+ # generates a delete message
41
+ # "ids" can be a single value or array of values
42
+ def delete_by_id(ids)
43
+ { delete: ids }.to_json
44
+ end
45
+
46
+ # generates a delete message
47
+ # "queries" can be a single value or an array of values
48
+ def delete_by_query(queries)
49
+ { delete: { query: queries } }.to_json
50
+ end
51
+ end
52
+ end
data/lib/rsolr/uri.rb CHANGED
@@ -1,11 +1,6 @@
1
1
  require 'uri'
2
2
 
3
3
  module RSolr::Uri
4
-
5
- def create url
6
- ::URI.parse (url[-1] == '/' || URI.parse(url).query) ? url : "#{url}/"
7
- end
8
-
9
4
  # Creates a Solr based query string.
10
5
  # Keys that have arrays values are set multiple times:
11
6
  # params_to_solr(:q => 'query', :fq => ['a', 'b'])
@@ -13,7 +8,7 @@ module RSolr::Uri
13
8
  # ?q=query&fq=a&fq=b
14
9
  # @param [boolean] escape false if no URI escaping is to be performed. Default true.
15
10
  # @return [String] Solr query params as a String, suitable for use in a url
16
- def params_to_solr(params, escape = true)
11
+ def self.params_to_solr(params, escape = true)
17
12
  return URI.encode_www_form(params.reject{|k,v| k.to_s.empty? || v.to_s.empty?}) if escape
18
13
 
19
14
  # escape = false if we are here
@@ -27,49 +22,4 @@ module RSolr::Uri
27
22
  end
28
23
  mapped.compact.join("&")
29
24
  end
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
- #
44
- # Performs URI escaping so that you can construct proper
45
- # query strings faster. Use this rather than the cgi.rb
46
- # version since it's faster.
47
- # (Stolen from Rack).
48
- # http://www.rubydoc.info/github/rack/rack/URI.encode_www_form_component
49
- # @deprecated
50
- def escape_query_value(s)
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(' ', '+')
56
- end
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
-
73
- extend self
74
-
75
25
  end
data/lib/rsolr/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  module RSolr
2
- VERSION = "1.1.2"
2
+ VERSION = "2.0.0.pre1"
3
3
 
4
4
  def self.version
5
5
  VERSION