algoliasearch-rails 1.9.5 → 1.10.0

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: db9c036214ef8c5ae7118c4a3ca0083adaa07a56
4
- data.tar.gz: 359618d78f294e509414fcb08dc189df34ab5d74
3
+ metadata.gz: 6bc9aa518564e9c0160f13ef67514a945f35da68
4
+ data.tar.gz: 49d26543e6d5adc2fccbc8bdcef24cc11f2c17f2
5
5
  SHA512:
6
- metadata.gz: 370169bc9d27f9b9b9bb2371afe51ab0acd62f843b80d4afd7d0076ab32f6b183c356402745edcf89794cede2cad074d337944d8db5a212edf8a3b6ffbf16666
7
- data.tar.gz: 7529fb5410beb1d5a15eee88163bb8e313ae2771e7a06effa2a7beb817ad4ac230e15bf5536c76be95f6667f6809b0dfe32de61ad0c875cdf2e0f27b2fb1eb6f
6
+ metadata.gz: 35f38a0dab2988e3aa315c1b5077ee4757807fdf8869469e29e7b278a60c74cd949449f5749841fa9d90d9f0cd5934f127370c3ec5ccf5264a343a184afb261b
7
+ data.tar.gz: 62e110ee3248badf1f02bbe1b98e23d07f5c04f95f92310f10bdca53e35e5c7bb76eeb415a240bd98f53db475e4be7b926af08730b1da2f3e47df84c168a7de1
data/ChangeLog CHANGED
@@ -1,5 +1,10 @@
1
1
  CHANGELOG
2
2
 
3
+ 2014-04-28 1.10.0
4
+
5
+ * Ability to configure slave indexes from the ```algoliasearch``` block
6
+ * Ability to target multiple indexes from a single model class
7
+
3
8
  2014-04-23 1.9.5
4
9
 
5
10
  * Add missing highlightPreTag/highlightPostTag settings
data/README.md CHANGED
@@ -18,6 +18,8 @@ Table of Content
18
18
  1. [Options](#options)
19
19
  1. [Configuration example](#configuration-example)
20
20
  1. [Indexing](#indexing)
21
+ 1. [Master/Slave](#masterslave)
22
+ 1. [Target multiple indexes](#target-multiple-indexes)
21
23
  1. [Tags](#tags)
22
24
  1. [Search](#search)
23
25
  1. [Faceting](#faceting)
@@ -341,6 +343,70 @@ To clear an index, use the <code>clear_index!</code> class method:
341
343
  Contact.clear_index!
342
344
  ```
343
345
 
346
+ Master/slave
347
+ ---------
348
+
349
+ You can define slave indexes using the <code>add_slave</code> method:
350
+
351
+ ```ruby
352
+ class Book < ActiveRecord::Base
353
+ attr_protected
354
+
355
+ include AlgoliaSearch
356
+
357
+ algoliasearch per_environment: true do
358
+ attributesToIndex [:name, :author, :editor]
359
+
360
+ # define a slave index to search by `author` only
361
+ add_slave 'Book_by_author', per_environment: true do
362
+ attributesToIndex [:author]
363
+ end
364
+
365
+ # define a slave index to search by `editor` only
366
+ add_slave 'Book_by_editor', per_environment: true do
367
+ attributesToIndex [:editor]
368
+ end
369
+ end
370
+
371
+ end
372
+ ```
373
+
374
+ Target multiple indexes
375
+ ---------
376
+
377
+ You can index a record in several indexes using the <code>add_index</code> method:
378
+
379
+ ```ruby
380
+ class Book < ActiveRecord::Base
381
+ attr_protected
382
+
383
+ include AlgoliaSearch
384
+
385
+ PUBLIC_INDEX_NAME = "Book_#{Rails.env}"
386
+ SECURED_INDEX_NAME = "SecuredBook_#{Rails.env}"
387
+
388
+ # store all books in index 'SECURED_INDEX_NAME'
389
+ algoliasearch index_name: SECURED_INDEX_NAME do
390
+ attributesToIndex [:name, :author]
391
+ # convert security to tags
392
+ tags do
393
+ [released ? 'public' : 'private', premium ? 'premium' : 'standard']
394
+ end
395
+
396
+ # store all 'public' (released and not premium) books in index 'PUBLIC_INDEX_NAME'
397
+ add_index PUBLIC_INDEX_NAME, if: :public? do
398
+ attributesToIndex [:name, :author]
399
+ end
400
+ end
401
+
402
+ private
403
+ def public?
404
+ released && !premium
405
+ end
406
+
407
+ end
408
+ ```
409
+
344
410
  Tags
345
411
  -----
346
412
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.9.5
1
+ 1.10.1
@@ -6,11 +6,11 @@
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "algoliasearch-rails"
9
- s.version = "1.9.5"
9
+ s.version = "1.10.0"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
12
  s.authors = ["Algolia"]
13
- s.date = "2014-04-23"
13
+ s.date = "2014-04-28"
14
14
  s.description = "AlgoliaSearch integration to your favorite ORM"
15
15
  s.email = "contact@algolia.com"
16
16
  s.extra_rdoc_files = [
@@ -47,25 +47,26 @@ module AlgoliaSearch
47
47
  class IndexSettings
48
48
 
49
49
  # AlgoliaSearch settings
50
- OPTIONS = [:attributesToIndex, :minWordSizefor1Typo,
51
- :minWordSizefor2Typos, :hitsPerPage, :attributesToRetrieve,
50
+ OPTIONS = [:minWordSizefor1Typo, :minWordSizefor2Typos,
51
+ :hitsPerPage, :attributesToRetrieve,
52
52
  :attributesToHighlight, :attributesToSnippet, :attributesToIndex,
53
53
  :highlightPreTag, :highlightPostTag,
54
54
  :ranking, :customRanking, :queryType, :attributesForFaceting,
55
- :separatorsToIndex, :optionalWords, :attributeForDistinct,
56
- :if, :unless]
55
+ :separatorsToIndex, :optionalWords, :attributeForDistinct]
57
56
  OPTIONS.each do |k|
58
57
  define_method k do |v|
59
58
  instance_variable_set("@#{k}", v)
60
59
  end
61
60
  end
62
61
 
63
- def initialize(block)
62
+ def initialize(options, block)
63
+ @options = options
64
64
  instance_exec(&block) if block
65
65
  end
66
66
 
67
67
  def attribute(*names, &block)
68
68
  raise ArgumentError.new('Cannot pass multiple attribute names if block given') if block_given? and names.length > 1
69
+ raise ArgumentError.new('Cannot specify additional attributes on a slave index') if @options[:slave]
69
70
  @attributes ||= {}
70
71
  names.each do |name|
71
72
  @attributes[name.to_s] = block_given? ? Proc.new { |o| o.instance_eval(&block) } : Proc.new { |o| o.send(name) }
@@ -75,6 +76,7 @@ module AlgoliaSearch
75
76
 
76
77
  def add_attribute(*names, &block)
77
78
  raise ArgumentError.new('Cannot pass multiple attribute names if block given') if block_given? and names.length > 1
79
+ raise ArgumentError.new('Cannot specify additional attributes on a slave index') if @options[:slave]
78
80
  @additional_attributes ||= {}
79
81
  names.each do |name|
80
82
  @additional_attributes[name.to_s] = block_given? ? Proc.new { |o| o.instance_eval(&block) } : Proc.new { |o| o.send(name) }
@@ -92,12 +94,14 @@ module AlgoliaSearch
92
94
  end
93
95
 
94
96
  def geoloc(lat_attr, lng_attr)
97
+ raise ArgumentError.new('Cannot specify additional attributes on a slave index') if @options[:slave]
95
98
  add_attribute :_geoloc do |o|
96
99
  { :lat => o.send(lat_attr).to_f, :lng => o.send(lng_attr).to_f }
97
100
  end
98
101
  end
99
102
 
100
103
  def tags(*args, &block)
104
+ raise ArgumentError.new('Cannot specify additional attributes on a slave index') if @options[:slave]
101
105
  add_attribute :_tags do |o|
102
106
  v = block_given? ? o.instance_eval(&block) : args
103
107
  v.is_a?(Array) ? v : [v]
@@ -114,8 +118,32 @@ module AlgoliaSearch
114
118
  v = get_setting(k)
115
119
  settings[k] = v if !v.nil?
116
120
  end
121
+ settings[:slaves] = additional_indexes.select { |options, s| options[:slave] }.map do |options, s|
122
+ name = options[:index_name]
123
+ name = "#{name}_#{Rails.env.to_s}" if options[:per_environment]
124
+ name
125
+ end
117
126
  settings
118
127
  end
128
+
129
+ def add_index(index_name, options = {}, &block)
130
+ raise ArgumentError.new('Cannot specify additional index on a slave index') if @options[:slave]
131
+ raise ArgumentError.new('No block given') if !block_given?
132
+ raise ArgumentError.new('Options auto_index and auto_remove cannot be set on nested indexes') if options[:auto_index] || options[:auto_remove]
133
+ options[:index_name] = index_name
134
+ @additional_indexes ||= {}
135
+ @additional_indexes[options] = IndexSettings.new(options, Proc.new)
136
+ end
137
+
138
+ def add_slave(index_name, options = {}, &block)
139
+ raise ArgumentError.new('Cannot specify additional slaves on a slave index') if @options[:slave]
140
+ raise ArgumentError.new('No block given') if !block_given?
141
+ add_index(index_name, options.merge({ :slave => true }), &block)
142
+ end
143
+
144
+ def additional_indexes
145
+ @additional_indexes || {}
146
+ end
119
147
  end
120
148
 
121
149
  # these are the class methods added when AlgoliaSearch is included
@@ -136,13 +164,12 @@ module AlgoliaSearch
136
164
  alias_method :must_reindex?, :algolia_must_reindex? unless method_defined? :must_reindex?
137
165
  end
138
166
 
139
- base.cattr_accessor :algolia_options, :algolia_settings, :algolia_index_settings
167
+ base.cattr_accessor :algoliasearch_options, :algoliasearch_settings
140
168
  end
141
169
 
142
170
  def algoliasearch(options = {}, &block)
143
- self.algolia_index_settings = IndexSettings.new(block_given? ? Proc.new : nil)
144
- self.algolia_settings = algolia_index_settings.to_settings
145
- self.algolia_options = { :type => algolia_full_const_get(model_name.to_s), :per_page => algolia_index_settings.get_setting(:hitsPerPage) || 10, :page => 1 }.merge(options)
171
+ self.algoliasearch_settings = IndexSettings.new(options, block_given? ? Proc.new : nil)
172
+ self.algoliasearch_options = { :type => algolia_full_const_get(model_name.to_s), :per_page => algoliasearch_settings.get_setting(:hitsPerPage) || 10, :page => 1 }.merge(options)
146
173
 
147
174
  attr_accessor :highlight_result
148
175
 
@@ -170,70 +197,91 @@ module AlgoliaSearch
170
197
 
171
198
  def algolia_reindex!(batch_size = 1000, synchronous = false)
172
199
  return if @algolia_without_auto_index_scope
173
- algolia_ensure_init
174
- last_task = nil
175
-
176
- algolia_find_in_batches(batch_size) do |group|
177
- if algolia_conditional_index?
178
- # delete non-indexable objects
179
- objects = group.select { |o| !algolia_indexable?(o) }.map { |o| algolia_object_id_of(o) }
180
- @algolia_index.delete_objects(objects)
181
- # select only indexable objects
182
- group = group.select { |o| algolia_indexable?(o) }
200
+ algolia_configurations.each do |options, settings|
201
+ index = algolia_ensure_init(options, settings)
202
+ next if options[:slave]
203
+ last_task = nil
204
+
205
+ algolia_find_in_batches(batch_size) do |group|
206
+ if algolia_conditional_index?(options)
207
+ # delete non-indexable objects
208
+ objects = group.select { |o| !algolia_indexable?(o, options) }.map { |o| algolia_object_id_of(o, options) }
209
+ index.delete_objects(objects)
210
+ # select only indexable objects
211
+ group = group.select { |o| algolia_indexable?(o, options) }
212
+ end
213
+ objects = group.map { |o| settings.get_attributes(o).merge 'objectID' => algolia_object_id_of(o, options) }
214
+ last_task = index.save_objects(objects)
183
215
  end
184
- objects = group.map { |o| algolia_index_settings.get_attributes(o).merge 'objectID' => algolia_object_id_of(o) }
185
- last_task = @algolia_index.save_objects(objects)
216
+
217
+ index.wait_task(last_task["taskID"]) if last_task and synchronous == true
186
218
  end
187
- @algolia_index.wait_task(last_task["taskID"]) if last_task and synchronous == true
219
+ nil
188
220
  end
189
221
 
190
222
  def algolia_index_objects(objects, synchronous = false)
191
- task = @algolia_index.save_objects(objects.map { |o| algolia_index_settings.get_attributes(o).merge 'objectID' => algolia_object_id_of(o) })
192
- @algolia_index.wait_task(task["taskID"]) if synchronous == true
223
+ algolia_configurations.each do |options, settings|
224
+ index = algolia_ensure_init(options, settings)
225
+ next if options[:slave]
226
+ task = index.save_objects(objects.map { |o| settings.get_attributes(o).merge 'objectID' => algolia_object_id_of(o, options) })
227
+ index.wait_task(task["taskID"]) if synchronous == true
228
+ end
193
229
  end
194
230
 
195
231
  def algolia_index!(object, synchronous = false)
196
232
  return if @algolia_without_auto_index_scope
197
- object_id = algolia_object_id_of(object)
198
- raise ArgumentError.new("Cannot index a blank objectID") if object_id.blank?
199
- algolia_ensure_init
200
- if algolia_indexable?(object)
201
- if synchronous
202
- @algolia_index.add_object!(algolia_index_settings.get_attributes(object), object_id)
203
- else
204
- @algolia_index.add_object(algolia_index_settings.get_attributes(object), object_id)
205
- end
206
- elsif algolia_conditional_index?
207
- # remove non-indexable objects
208
- if synchronous
209
- @algolia_index.delete_object!(object_id)
210
- else
211
- @algolia_index.delete_object(object_id)
233
+ algolia_configurations.each do |options, settings|
234
+ object_id = algolia_object_id_of(object, options)
235
+ raise ArgumentError.new("Cannot index a blank objectID") if object_id.blank?
236
+ index = algolia_ensure_init(options, settings)
237
+ next if options[:slave]
238
+ if algolia_indexable?(object, options)
239
+ if synchronous
240
+ index.add_object!(settings.get_attributes(object), object_id)
241
+ else
242
+ index.add_object(settings.get_attributes(object), object_id)
243
+ end
244
+ elsif algolia_conditional_index?(options)
245
+ # remove non-indexable objects
246
+ if synchronous
247
+ index.delete_object!(object_id)
248
+ else
249
+ index.delete_object(object_id)
250
+ end
212
251
  end
213
252
  end
253
+ nil
214
254
  end
215
255
 
216
256
  def algolia_remove_from_index!(object, synchronous = false)
217
257
  return if @algolia_without_auto_index_scope
218
258
  object_id = algolia_object_id_of(object)
219
259
  raise ArgumentError.new("Cannot index a blank objectID") if object_id.blank?
220
- algolia_ensure_init
221
- if synchronous
222
- @algolia_index.delete_object!(object_id)
223
- else
224
- @algolia_index.delete_object(object_id)
260
+ algolia_configurations.each do |options, settings|
261
+ index = algolia_ensure_init(options, settings)
262
+ next if options[:slave]
263
+ if synchronous
264
+ index.delete_object!(object_id)
265
+ else
266
+ index.delete_object(object_id)
267
+ end
225
268
  end
269
+ nil
226
270
  end
227
271
 
228
272
  def algolia_clear_index!(synchronous = false)
229
- algolia_ensure_init
230
- synchronous ? @algolia_index.clear! : @algolia_index.clear
231
- @algolia_index = nil
273
+ algolia_configurations.each do |options, settings|
274
+ index = algolia_ensure_init(options, settings)
275
+ next if options[:slave]
276
+ synchronous ? index.clear! : index.clear
277
+ @algolia_indexes[settings] = nil
278
+ end
279
+ nil
232
280
  end
233
281
 
234
282
  def algolia_raw_search(q, params = {})
235
- algolia_ensure_init
236
- @algolia_index.search(q, Hash[params.map { |k,v| [k.to_s, v.to_s] }])
283
+ index = algolia_ensure_init
284
+ index.search(q, Hash[params.map { |k,v| [k.to_s, v.to_s] }])
237
285
  end
238
286
 
239
287
  module AdditionalMethods
@@ -266,63 +314,88 @@ module AlgoliaSearch
266
314
  end
267
315
  json = algolia_raw_search(q, params)
268
316
  results = json['hits'].map do |hit|
269
- o = algolia_options[:type].where(algolia_object_id_method => hit['objectID']).first
317
+ o = algoliasearch_options[:type].where(algolia_object_id_method => hit['objectID']).first
270
318
  if o
271
319
  o.highlight_result = hit['_highlightResult']
272
320
  o
273
321
  end
274
322
  end.compact
275
- res = AlgoliaSearch::Pagination.create(results, json['nbHits'].to_i, algolia_options.merge({ :page => json['page'] + 1, :per_page => json['hitsPerPage'] }))
323
+ res = AlgoliaSearch::Pagination.create(results, json['nbHits'].to_i, algoliasearch_options.merge({ :page => json['page'] + 1, :per_page => json['hitsPerPage'] }))
276
324
  res.extend(AdditionalMethods)
277
325
  res.send(:algolia_init_raw_answer, json)
278
326
  res
279
327
  end
280
328
 
281
- def algolia_index
329
+ def algolia_index(name = nil)
330
+ if name
331
+ algolia_configurations.each do |o, s|
332
+ return algolia_ensure_init(o, s) if o[:index_name].to_s == name.to_s
333
+ end
334
+ raise ArgumentError.new("Invalid index name: #{name}")
335
+ end
282
336
  algolia_ensure_init
283
- @algolia_index
284
337
  end
285
338
 
286
- def algolia_index_name
287
- name = algolia_options[:index_name] || model_name.to_s.gsub('::', '_')
288
- name = "#{name}_#{Rails.env.to_s}" if algolia_options[:per_environment]
339
+ def algolia_index_name(options = nil)
340
+ options ||= algoliasearch_options
341
+ name = options[:index_name] || model_name.to_s.gsub('::', '_')
342
+ name = "#{name}_#{Rails.env.to_s}" if options[:per_environment]
289
343
  name
290
344
  end
291
345
 
292
346
  def algolia_must_reindex?(object)
293
- return true if algolia_object_id_changed?(object)
294
- algolia_index_settings.get_attributes(object).each do |k, v|
295
- changed_method = "#{k}_changed?"
296
- return true if object.respond_to?(changed_method) && object.send(changed_method)
347
+ algolia_configurations.each do |options, settings|
348
+ next if options[:slave]
349
+ return true if algolia_object_id_changed?(object, options)
350
+ settings.get_attributes(object).each do |k, v|
351
+ changed_method = "#{k}_changed?"
352
+ return true if object.respond_to?(changed_method) && object.send(changed_method)
353
+ end
297
354
  end
298
355
  return false
299
356
  end
300
357
 
301
358
  protected
302
359
 
303
- def algolia_ensure_init
304
- return if @algolia_index
305
- @algolia_index = Algolia::Index.new(algolia_index_name)
306
- current_settings = @algolia_index.get_settings rescue nil # if the index doesn't exist
307
- @algolia_index.set_settings(algolia_settings) if algolia_index_settings_changed?(current_settings, algolia_settings)
360
+ def algolia_ensure_init(options = nil, settings = nil)
361
+ @algolia_indexes ||= {}
362
+ options ||= algoliasearch_options
363
+ settings ||= algoliasearch_settings
364
+ return @algolia_indexes[settings] if @algolia_indexes[settings]
365
+ @algolia_indexes[settings] = Algolia::Index.new(algolia_index_name(options))
366
+ current_settings = @algolia_indexes[settings].get_settings rescue nil # if the index doesn't exist
367
+ @algolia_indexes[settings].set_settings(settings.to_settings) if algoliasearch_settings_changed?(current_settings, settings.to_settings)
368
+ @algolia_indexes[settings]
308
369
  end
309
370
 
310
371
  private
311
372
 
312
- def algolia_object_id_method
313
- algolia_options[:id] || algolia_options[:object_id] || :id
373
+ def algolia_configurations
374
+ if @configurations.nil?
375
+ @configurations = {}
376
+ @configurations[algoliasearch_options] = algoliasearch_settings
377
+ algoliasearch_settings.additional_indexes.each do |k,v|
378
+ @configurations[k] = v
379
+ end
380
+ end
381
+ @configurations
382
+ end
383
+
384
+ def algolia_object_id_method(options = nil)
385
+ options ||= algoliasearch_options
386
+ options[:id] || options[:object_id] || :id
314
387
  end
315
388
 
316
- def algolia_object_id_of(o)
317
- o.send(algolia_object_id_method).to_s
389
+ def algolia_object_id_of(o, options = nil)
390
+ o.send(algolia_object_id_method(options)).to_s
318
391
  end
319
392
 
320
- def algolia_object_id_changed?(o)
321
- m = "#{algolia_object_id_method}_changed?"
393
+ def algolia_object_id_changed?(o, options = nil)
394
+ m = "#{algolia_object_id_method(options)}_changed?"
322
395
  o.respond_to?(m) ? o.send(m) : false
323
396
  end
324
397
 
325
- def algolia_index_settings_changed?(prev, current)
398
+ def algoliasearch_settings_changed?(prev, current)
326
399
  return true if prev.nil?
327
400
  current.each do |k, v|
328
401
  prev_v = prev[k.to_s]
@@ -348,13 +421,15 @@ module AlgoliaSearch
348
421
  obj
349
422
  end
350
423
 
351
- def algolia_conditional_index?
352
- algolia_options[:if].present? || algolia_options[:unless].present?
424
+ def algolia_conditional_index?(options = nil)
425
+ options ||= algoliasearch_options
426
+ options[:if].present? || options[:unless].present?
353
427
  end
354
428
 
355
- def algolia_indexable?(object)
356
- if_passes = algolia_options[:if].blank? || algolia_constraint_passes?(object, algolia_options[:if])
357
- unless_passes = algolia_options[:unless].blank? || !algolia_constraint_passes?(object, algolia_options[:unless])
429
+ def algolia_indexable?(object, options = nil)
430
+ options ||= algoliasearch_options
431
+ if_passes = options[:if].blank? || algolia_constraint_passes?(object, options[:if])
432
+ unless_passes = options[:unless].blank? || !algolia_constraint_passes?(object, options[:unless])
358
433
  if_passes && unless_passes
359
434
  end
360
435
 
@@ -404,12 +479,12 @@ module AlgoliaSearch
404
479
  end
405
480
  end
406
481
 
407
- def algolia_index!
408
- self.class.algolia_index!(self, algolia_synchronous?)
482
+ def algolia_index!(synchronous = false)
483
+ self.class.algolia_index!(self, synchronous || algolia_synchronous?)
409
484
  end
410
485
 
411
- def algolia_remove_from_index!
412
- self.class.algolia_remove_from_index!(self, algolia_synchronous?)
486
+ def algolia_remove_from_index!(synchronous = false)
487
+ self.class.algolia_remove_from_index!(self, synchronous || algolia_synchronous?)
413
488
  end
414
489
 
415
490
  private
metadata CHANGED
@@ -1,111 +1,111 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: algoliasearch-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.9.5
4
+ version: 1.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Algolia
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-04-23 00:00:00.000000000 Z
11
+ date: 2014-04-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: 1.5.1
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '>='
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: 1.5.1
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: algoliasearch
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: 1.2.5
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: 1.2.5
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: will_paginate
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - '>='
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: 2.3.15
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - '>='
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: 2.3.15
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: kaminari
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - '>='
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - '>='
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: travis
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - '>='
73
+ - - ">="
74
74
  - !ruby/object:Gem::Version
75
75
  version: '0'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - '>='
80
+ - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: rake
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - '>='
87
+ - - ">="
88
88
  - !ruby/object:Gem::Version
89
89
  version: '0'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - '>='
94
+ - - ">="
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: rdoc
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - '>='
101
+ - - ">="
102
102
  - !ruby/object:Gem::Version
103
103
  version: '0'
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - '>='
108
+ - - ">="
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
111
  description: AlgoliaSearch integration to your favorite ORM
@@ -117,9 +117,9 @@ extra_rdoc_files:
117
117
  - LICENSE
118
118
  - README.md
119
119
  files:
120
- - .document
121
- - .rspec
122
- - .travis.yml
120
+ - ".document"
121
+ - ".rspec"
122
+ - ".travis.yml"
123
123
  - ChangeLog
124
124
  - Gemfile
125
125
  - Gemfile.lock
@@ -140,10 +140,10 @@ files:
140
140
  - spec/utilities_spec.rb
141
141
  - vendor/assets/javascripts/algolia/algoliasearch.js
142
142
  - vendor/assets/javascripts/algolia/algoliasearch.min.js
143
- - vendor/assets/javascripts/algolia/typeahead.jquery.js
143
+ - vendor/assets/javascripts/algolia/bloodhound.js
144
144
  - vendor/assets/javascripts/algolia/typeahead.bundle.js
145
145
  - vendor/assets/javascripts/algolia/typeahead.bundle.min.js
146
- - vendor/assets/javascripts/algolia/bloodhound.js
146
+ - vendor/assets/javascripts/algolia/typeahead.jquery.js
147
147
  homepage: http://github.com/algolia/algoliasearch-rails
148
148
  licenses:
149
149
  - MIT
@@ -154,17 +154,17 @@ require_paths:
154
154
  - lib
155
155
  required_ruby_version: !ruby/object:Gem::Requirement
156
156
  requirements:
157
- - - '>='
157
+ - - ">="
158
158
  - !ruby/object:Gem::Version
159
159
  version: '0'
160
160
  required_rubygems_version: !ruby/object:Gem::Requirement
161
161
  requirements:
162
- - - '>='
162
+ - - ">="
163
163
  - !ruby/object:Gem::Version
164
164
  version: '0'
165
165
  requirements: []
166
166
  rubyforge_project:
167
- rubygems_version: 2.1.11
167
+ rubygems_version: 2.2.2
168
168
  signing_key:
169
169
  specification_version: 4
170
170
  summary: AlgoliaSearch integration to your favorite ORM