algoliasearch-rails 1.7.0 → 1.7.1

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: 740b9ffd93cd8537e849d5ca75dcbee77dfdd153
4
- data.tar.gz: 39d3828d7d048d426bbc8f7964d5f3edadaf6218
3
+ metadata.gz: 2aa68e2724bc3f0c7b43545b8d5156ae476acfde
4
+ data.tar.gz: 4e3d1a69ce8cff145fc91b69f845cb2c38bde8bb
5
5
  SHA512:
6
- metadata.gz: 5c0ef9db00ed0db52a436039e601c91a0cef33f884c7be3cc515c4acc5aca271dc2e1daa99b2d8fdc30f57d0da5d7a830ca8102f28f9e5e846a6f1c3b3ea8f3d
7
- data.tar.gz: a32a694f54c5f5e20a6e2dd8b87492d246eba261fb480882e46ec458bfe34d750a81fc7707d37231d90a07a087c5e0e10d4413b6ca32393de0428c9b452b7f85
6
+ metadata.gz: 7e685c99823cb8f047b1bfd8d390a5b2a535df639586f6e7e8d92fe5eb60b546370f2697bfbc07a3afbfc067195ec23ad7b81a17645699ac93b974dbb2331811
7
+ data.tar.gz: bf4848ce707351534dbe3fe03f952419a721a3ce4e37b7ecaf84c90c574721a1edae0373ec74eab936bf0146ee267fbbcc700a84eefeb13e02a1d1f7b3dce916
data/ChangeLog CHANGED
@@ -1,5 +1,10 @@
1
1
  CHANGELOG
2
2
 
3
+ 2014-01-31 1.7.1
4
+
5
+ * Ensure methods are not conflicting with already defined ones (use algolia_METHOD_NAME)
6
+ * Add ```:if``` and ```:unless``` options to control objects indexing
7
+
3
8
  2014-01-07 1.7.0
4
9
 
5
10
  * Updated algoliasearch to 1.2 (httpclient instead of curb as underlying HTTP layer)
data/Gemfile CHANGED
@@ -7,7 +7,10 @@ gem 'rubysl', '~> 2.0', platform: :rbx
7
7
  group :test do
8
8
  gem 'rspec', '>= 2.5.0'
9
9
  gem 'activerecord', '>= 3.0.7'
10
- gem 'sqlite3'
10
+ gem 'sqlite3', platform: [:rbx, :ruby]
11
+ gem 'jdbc-sqlite3', platform: :jruby
12
+ gem 'activerecord-jdbc-adapter', platform: :jruby
13
+ gem 'activerecord-jdbcsqlite3-adapter', platform: :jruby
11
14
  gem 'autotest'
12
15
  gem 'autotest-fsevent'
13
16
  gem 'redgreen'
data/Gemfile.lock CHANGED
@@ -17,6 +17,11 @@ GEM
17
17
  activesupport (= 4.0.2)
18
18
  arel (~> 4.0.0)
19
19
  activerecord-deprecated_finders (1.0.3)
20
+ activerecord-jdbc-adapter (1.3.4)
21
+ activerecord (>= 2.2)
22
+ activerecord-jdbcsqlite3-adapter (1.3.4)
23
+ activerecord-jdbc-adapter (~> 1.3.4)
24
+ jdbc-sqlite3 (~> 3.7.2)
20
25
  activesupport (4.0.2)
21
26
  i18n (~> 0.6, >= 0.6.4)
22
27
  minitest (~> 4.2)
@@ -29,12 +34,13 @@ GEM
29
34
  json (>= 1.5.1)
30
35
  arel (4.0.1)
31
36
  atomic (1.1.14)
37
+ atomic (1.1.14-java)
32
38
  autotest (4.4.6)
33
39
  ZenTest (>= 4.4.1)
34
40
  autotest-fsevent (0.2.9)
35
41
  sys-uname
36
42
  autotest-growl (0.2.16)
37
- backports (3.3.5)
43
+ backports (3.4.0)
38
44
  builder (3.1.4)
39
45
  coderay (1.1.0)
40
46
  diff-lcs (1.2.5)
@@ -47,6 +53,7 @@ GEM
47
53
  faraday_middleware (0.9.0)
48
54
  faraday (>= 0.7.4, < 0.9)
49
55
  ffi (1.9.3)
56
+ ffi (1.9.3-java)
50
57
  ffi2-generators (0.1.1)
51
58
  gh (0.13.0)
52
59
  addressable
@@ -58,7 +65,9 @@ GEM
58
65
  highline (1.6.20)
59
66
  httpclient (2.3.4.1)
60
67
  i18n (0.6.9)
68
+ jdbc-sqlite3 (3.7.2.1)
61
69
  json (1.8.1)
70
+ json (1.8.1-java)
62
71
  kaminari (0.15.0)
63
72
  actionpack (>= 3.0.0)
64
73
  activesupport (>= 3.0.0)
@@ -75,6 +84,11 @@ GEM
75
84
  coderay (~> 1.0)
76
85
  method_source (~> 0.8)
77
86
  slop (~> 3.4)
87
+ pry (0.9.12.4-java)
88
+ coderay (~> 1.0)
89
+ method_source (~> 0.8)
90
+ slop (~> 3.4)
91
+ spoon (~> 0.0)
78
92
  pusher-client (0.4.0)
79
93
  websocket (~> 1.0.0)
80
94
  rack (1.5.2)
@@ -295,11 +309,15 @@ GEM
295
309
  rubysl-yaml (2.0.4)
296
310
  rubysl-zlib (2.0.1)
297
311
  slop (3.4.7)
312
+ spoon (0.0.4)
313
+ ffi
298
314
  sqlite3 (1.3.8)
299
315
  sys-uname (0.9.2)
300
316
  ffi (>= 1.0.0)
301
317
  thread_safe (0.1.3)
302
318
  atomic
319
+ thread_safe (0.1.3-java)
320
+ atomic
303
321
  travis (1.6.6)
304
322
  addressable (~> 2.3)
305
323
  backports
@@ -318,14 +336,18 @@ GEM
318
336
  will_paginate (3.0.5)
319
337
 
320
338
  PLATFORMS
339
+ java
321
340
  ruby
322
341
 
323
342
  DEPENDENCIES
324
343
  activerecord (>= 3.0.7)
344
+ activerecord-jdbc-adapter
345
+ activerecord-jdbcsqlite3-adapter
325
346
  algoliasearch (~> 1.2)
326
347
  autotest
327
348
  autotest-fsevent
328
349
  autotest-growl
350
+ jdbc-sqlite3
329
351
  json (>= 1.5.1)
330
352
  kaminari
331
353
  rake
data/README.md CHANGED
@@ -16,6 +16,7 @@ Table of Content
16
16
  1. [Setup](#setup)
17
17
  1. [Quick Start](#quick-start)
18
18
  1. [Options](#options)
19
+ 1. [Configuration example](#configuration-example)
19
20
  1. [Indexing](#indexing)
20
21
  1. [Tags](#tags)
21
22
  1. [Geo-search](#geo-search)
@@ -105,6 +106,14 @@ end
105
106
  p Contact.search("jon doe")
106
107
  ```
107
108
 
109
+ **Notes:** All methods injected by the ```AlgoliaSearch``` include are prefixed by ```algolia_``` and aliased to the associated short names if they aren't already defined.
110
+
111
+ ```ruby
112
+ Contact.algolia_reindex! # <=> Contact.reindex!
113
+
114
+ Contact.algolia_search("jon doe") # <=> Contact.search("jon doe")
115
+ ```
116
+
108
117
  Options
109
118
  ----------
110
119
 
@@ -194,6 +203,90 @@ class UniqUser < ActiveRecord::Base
194
203
  end
195
204
  ```
196
205
 
206
+ You can add constraints controlling if a record must be indexed by using options the ```:if``` or ```:unless``` options.
207
+
208
+ ```ruby
209
+ class Post < ActiveRecord::Base
210
+ include AlgoliaSearch
211
+
212
+ algoliasearch if: :published?, unless: :deleted? do
213
+ end
214
+
215
+ def published?
216
+ # [...]
217
+ end
218
+
219
+ def deleted?
220
+ # [...]
221
+ end
222
+ end
223
+ ```
224
+
225
+ Configuration example
226
+ ---------------------
227
+
228
+ Here is a real-word configuration example (from [HN Search](https://github.com/algolia/hn-search)):
229
+
230
+ ```ruby
231
+ class Item < ActiveRecord::Base
232
+ include AlgoliaSearch
233
+
234
+ algoliasearch per_environment: true do
235
+ # the list of attributes sent to Algolia's API
236
+ attribute :created_at, :title, :url, :author, :points, :story_text, :comment_text, :author, :num_comments, :story_id, :story_title, :
237
+
238
+ # integer version of the created_at datetime field, to use numerical filtering
239
+ attribute :created_at_i do
240
+ created_at.to_i
241
+ end
242
+
243
+ # `title` is more important than `{story,comment}_text`, `{story,comment}_text` more than `url`, `url` more than `author`
244
+ # btw, do not take into account position in most fields to avoid first word match boost
245
+ attributesToIndex ['unordered(title)', 'unordered(story_text)', 'unordered(comment_text)', 'unordered(url)', 'author', 'created_at_i']
246
+
247
+ # list of attributes to highlight
248
+ attributesToHighlight ['title', 'story_text', 'comment_text', 'url', 'story_url', 'author', 'story_title']
249
+
250
+ # tags used for filtering
251
+ tags do
252
+ [item_type, "author_#{author}", "story_#{story_id}"]
253
+ end
254
+
255
+ # use associated number of HN points to sort results (last sort criteria)
256
+ customRanking ['desc(points)', 'desc(num_comments)']
257
+
258
+ # controls the way results are sorted sorting on the following 4 criteria (one after another)
259
+ # I removed the 'exact' match critera (improve 1-words query relevance, doesn't fit HNSearch needs)
260
+ ranking ['typo', 'proximity', 'attribute', 'custom']
261
+
262
+ # google+, $1.5M raises, C#: we love you
263
+ separatorsToIndex '+#$'
264
+ end
265
+
266
+ def story_text
267
+ item_type_cd != Item.comment ? text : nil
268
+ end
269
+
270
+ def story_title
271
+ comment? && story ? story.title : nil
272
+ end
273
+
274
+ def story_url
275
+ comment? && story ? story.url : nil
276
+ end
277
+
278
+ def comment_text
279
+ comment? ? text : nil
280
+ end
281
+
282
+ def comment?
283
+ item_type_cd == Item.comment
284
+ end
285
+
286
+ # [...]
287
+ end
288
+ ```
289
+
197
290
  Indexing
198
291
  ---------
199
292
 
data/Rakefile CHANGED
@@ -1,24 +1,6 @@
1
1
  require 'rubygems'
2
2
  require 'rake'
3
3
 
4
- begin
5
- require 'jeweler'
6
- Jeweler::Tasks.new do |gem|
7
- gem.name = "algoliasearch-rails"
8
- gem.summary = %Q{AlgoliaSearch integration to your favorite ORM}
9
- gem.description = %Q{AlgoliaSearch integration to your favorite ORM}
10
- gem.homepage = "http://github.com/algolia/algoliasearch-rails"
11
- gem.email = "contact@algolia.com"
12
- gem.authors = ["Algolia"]
13
- gem.files.exclude 'spec/integration_spec.rb'
14
- gem.license = "MIT"
15
- # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
16
- end
17
- Jeweler::RubygemsDotOrgTasks.new
18
- rescue LoadError
19
- puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
20
- end
21
-
22
4
  require 'rdoc/task'
23
5
  Rake::RDocTask.new do |rdoc|
24
6
  version = File.exist?('VERSION') ? File.read('VERSION') : ""
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.7.0
1
+ 1.7.1
@@ -6,7 +6,7 @@
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "algoliasearch-rails"
9
- s.version = "1.7.0"
9
+ s.version = "1.7.1"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
12
  s.authors = ["Algolia"]
@@ -36,8 +36,10 @@ module AlgoliaSearch
36
36
  @included_in << klass
37
37
  @included_in.uniq!
38
38
 
39
- klass.send :include, InstanceMethods
40
- klass.extend ClassMethods
39
+ klass.class_eval do
40
+ extend ClassMethods
41
+ include InstanceMethods
42
+ end
41
43
  end
42
44
 
43
45
  end
@@ -49,7 +51,8 @@ module AlgoliaSearch
49
51
  :minWordSizefor2Typos, :hitsPerPage, :attributesToRetrieve,
50
52
  :attributesToHighlight, :attributesToSnippet, :attributesToIndex,
51
53
  :ranking, :customRanking, :queryType, :attributesForFaceting,
52
- :separatorsToIndex, :optionalWords, :attributeForDistinct]
54
+ :separatorsToIndex, :optionalWords, :attributeForDistinct,
55
+ :if, :unless]
53
56
  OPTIONS.each do |k|
54
57
  define_method k do |v|
55
58
  instance_variable_set("@#{k}", v)
@@ -117,126 +120,145 @@ module AlgoliaSearch
117
120
  # these are the class methods added when AlgoliaSearch is included
118
121
  module ClassMethods
119
122
 
123
+ def self.extended(base)
124
+ class <<base
125
+ alias_method :without_auto_index, :algolia_without_auto_index unless method_defined? :without_auto_index
126
+ alias_method :reindex!, :algolia_reindex! unless method_defined? :reindex!
127
+ alias_method :index!, :algolia_index! unless method_defined? :index!
128
+ alias_method :remove_from_index!, :algolia_remove_from_index! unless method_defined? :remove_from_index!
129
+ alias_method :clear_index!, :algolia_clear_index! unless method_defined? :clear_index!
130
+ alias_method :search, :algolia_search unless method_defined? :search
131
+ alias_method :index, :algolia_index unless method_defined? :index
132
+ alias_method :index_name, :algolia_index_name unless method_defined? :index_name
133
+ alias_method :must_reindex?, :algolia_must_reindex? unless method_defined? :must_reindex?
134
+ end
135
+ end
136
+
120
137
  def algoliasearch(options = {}, &block)
121
- @index_settings = IndexSettings.new(block_given? ? Proc.new : nil)
122
- @settings = @index_settings.to_settings
123
- @options = { type: full_const_get(model_name.to_s), per_page: @index_settings.get_setting(:hitsPerPage) || 10, page: 1 }.merge(options)
138
+ @algolia_index_settings = IndexSettings.new(block_given? ? Proc.new : nil)
139
+ @algolia_settings = @algolia_index_settings.to_settings
140
+ @algolia_options = { type: algolia_full_const_get(model_name.to_s), per_page: @algolia_index_settings.get_setting(:hitsPerPage) || 10, page: 1 }.merge(options)
124
141
 
125
142
  attr_accessor :highlight_result
126
143
 
127
144
  if options[:synchronous] == true
128
- after_validation :mark_synchronous if respond_to?(:before_validation)
145
+ after_validation :algolia_mark_synchronous if respond_to?(:before_validation)
129
146
  end
130
147
  unless options[:auto_index] == false
131
- after_validation :mark_must_reindex if respond_to?(:after_validation)
132
- before_save :mark_for_auto_indexing if respond_to?(:before_save)
133
- after_save :perform_index_tasks if respond_to?(:after_save)
148
+ after_validation :algolia_mark_must_reindex if respond_to?(:after_validation)
149
+ before_save :algolia_mark_for_auto_indexing if respond_to?(:before_save)
150
+ after_save :algolia_perform_index_tasks if respond_to?(:after_save)
134
151
  end
135
152
  unless options[:auto_remove] == false
136
153
  after_destroy { |searchable| searchable.remove_from_index! } if respond_to?(:after_destroy)
137
154
  end
138
155
  end
139
156
 
140
- def without_auto_index(&block)
141
- @without_auto_index_scope = true
157
+ def algolia_without_auto_index(&block)
158
+ @algolia_without_auto_index_scope = true
142
159
  begin
143
160
  yield
144
161
  ensure
145
- @without_auto_index_scope = false
162
+ @algolia_without_auto_index_scope = false
146
163
  end
147
164
  end
148
165
 
149
- def reindex!(batch_size = 1000, synchronous = false)
150
- return if @without_auto_index_scope
151
- ensure_init
166
+ def algolia_reindex!(batch_size = 1000, synchronous = false)
167
+ return if @algolia_without_auto_index_scope
168
+ algolia_ensure_init
152
169
  last_task = nil
153
170
  find_in_batches(batch_size: batch_size) do |group|
154
- objects = group.map { |o| @index_settings.get_attributes(o).merge 'objectID' => object_id_of(o) }
155
- last_task = @index.save_objects(objects)
171
+ group.select! { |o| algolia_indexable?(o) } if algolia_conditional_index?
172
+ objects = group.map { |o| @algolia_index_settings.get_attributes(o).merge 'objectID' => algolia_object_id_of(o) }
173
+ last_task = @algolia_index.save_objects(objects)
156
174
  end
157
- @index.wait_task(last_task["taskID"]) if last_task and synchronous == true
175
+ @algolia_index.wait_task(last_task["taskID"]) if last_task and synchronous == true
158
176
  end
159
177
 
160
- def index!(object, synchronous = false)
161
- return if @without_auto_index_scope
162
- ensure_init
178
+ def algolia_index!(object, synchronous = false)
179
+ return if @algolia_without_auto_index_scope || !algolia_indexable?(object)
180
+ algolia_ensure_init
163
181
  if synchronous
164
- @index.add_object!(@index_settings.get_attributes(object), object_id_of(object))
182
+ @algolia_index.add_object!(@algolia_index_settings.get_attributes(object), algolia_object_id_of(object))
165
183
  else
166
- @index.add_object(@index_settings.get_attributes(object), object_id_of(object))
184
+ @algolia_index.add_object(@algolia_index_settings.get_attributes(object), algolia_object_id_of(object))
167
185
  end
168
186
  end
169
187
 
170
- def remove_from_index!(object, synchronous = false)
171
- return if @without_auto_index_scope
172
- ensure_init
188
+ def algolia_remove_from_index!(object, synchronous = false)
189
+ return if @algolia_without_auto_index_scope
190
+ algolia_ensure_init
173
191
  if synchronous
174
- @index.delete_object!(object_id_of(object))
192
+ @algolia_index.delete_object!(algolia_object_id_of(object))
175
193
  else
176
- @index.delete_object(object_id_of(object))
194
+ @algolia_index.delete_object(algolia_object_id_of(object))
177
195
  end
178
196
  end
179
197
 
180
- def clear_index!(synchronous = false)
181
- ensure_init
182
- synchronous ? @index.clear! : @index.clear
183
- @index = nil
198
+ def algolia_clear_index!(synchronous = false)
199
+ algolia_ensure_init
200
+ synchronous ? @algolia_index.clear! : @algolia_index.clear
201
+ @algolia_index = nil
184
202
  end
185
203
 
186
- def search(q, settings = {})
187
- ensure_init
188
- json = @index.search(q, Hash[settings.map { |k,v| [k.to_s, v.to_s] }])
204
+ def algolia_search(q, settings = {})
205
+ algolia_ensure_init
206
+ json = @algolia_index.search(q, Hash[settings.map { |k,v| [k.to_s, v.to_s] }])
189
207
  results = json['hits'].map do |hit|
190
- o = @options[:type].where(object_id_method => hit['objectID']).first
191
- o.highlight_result = hit['_highlightResult']
192
- o
193
- end
194
- AlgoliaSearch::Pagination.create(results, json['nbHits'].to_i, @options)
208
+ o = @algolia_options[:type].where(algolia_object_id_method => hit['objectID']).first
209
+ if o
210
+ o.highlight_result = hit['_highlightResult']
211
+ o
212
+ end
213
+ end.compact
214
+ AlgoliaSearch::Pagination.create(results, json['nbHits'].to_i, @algolia_options)
195
215
  end
196
216
 
197
- def ensure_init
198
- return if @index
199
- @index = Algolia::Index.new(index_name)
200
- current_settings = @index.get_settings rescue nil # if the index doesn't exist
201
- @index.set_settings(@settings) if index_settings_changed?(current_settings, @settings)
217
+ def algolia_index
218
+ algolia_ensure_init
219
+ @algolia_index
202
220
  end
203
221
 
204
- def index
205
- ensure_init
206
- @index
222
+ def algolia_index_name
223
+ name = @algolia_options[:index_name] || model_name.to_s.gsub('::', '_')
224
+ name = "#{name}_#{Rails.env.to_s}" if @algolia_options[:per_environment]
225
+ name
207
226
  end
208
227
 
209
- def must_reindex?(object)
210
- return true if object_id_changed?(object)
211
- @index_settings.get_attributes(object).each do |k, v|
228
+ def algolia_must_reindex?(object)
229
+ return true if algolia_object_id_changed?(object)
230
+ @algolia_index_settings.get_attributes(object).each do |k, v|
212
231
  changed_method = "#{k}_changed?"
213
232
  return true if object.respond_to?(changed_method) && object.send(changed_method)
214
233
  end
215
234
  return false
216
235
  end
217
236
 
218
- def index_name
219
- name = @options[:index_name] || model_name.to_s.gsub('::', '_')
220
- name = "#{name}_#{Rails.env.to_s}" if @options[:per_environment]
221
- name
237
+ protected
238
+
239
+ def algolia_ensure_init
240
+ return if @algolia_index
241
+ @algolia_index = Algolia::Index.new(algolia_index_name)
242
+ current_settings = @algolia_index.get_settings rescue nil # if the index doesn't exist
243
+ @algolia_index.set_settings(@algolia_settings) if algolia_index_settings_changed?(current_settings, @algolia_settings)
222
244
  end
223
245
 
224
246
  private
225
247
 
226
- def object_id_method
227
- @options[:id] || @options[:object_id] || :id
248
+ def algolia_object_id_method
249
+ @algolia_options[:id] || @algolia_options[:object_id] || :id
228
250
  end
229
251
 
230
- def object_id_of(o)
231
- o.send(object_id_method).to_s
252
+ def algolia_object_id_of(o)
253
+ o.send(algolia_object_id_method).to_s
232
254
  end
233
255
 
234
- def object_id_changed?(o)
235
- m = "#{object_id_method}_changed?"
256
+ def algolia_object_id_changed?(o)
257
+ m = "#{algolia_object_id_method}_changed?"
236
258
  o.respond_to?(m) ? o.send(m) : false
237
259
  end
238
260
 
239
- def index_settings_changed?(prev, current)
261
+ def algolia_index_settings_changed?(prev, current)
240
262
  return true if prev.nil?
241
263
  current.each do |k, v|
242
264
  prev_v = prev[k.to_s]
@@ -250,7 +272,7 @@ module AlgoliaSearch
250
272
  false
251
273
  end
252
274
 
253
- def full_const_get(name)
275
+ def algolia_full_const_get(name)
254
276
  list = name.split('::')
255
277
  list.shift if list.first.blank?
256
278
  obj = self
@@ -262,43 +284,78 @@ module AlgoliaSearch
262
284
  obj
263
285
  end
264
286
 
287
+ def algolia_conditional_index?
288
+ @algolia_options[:if].present? || @algolia_options[:unless].present?
289
+ end
290
+
291
+ def algolia_indexable?(object)
292
+ if_passes = @algolia_options[:if].blank? || algolia_constraint_passes?(object, @algolia_options[:if])
293
+ unless_passes = @algolia_options[:unless].blank? || !algolia_constraint_passes?(object, @algolia_options[:unless])
294
+ if_passes && unless_passes
295
+ end
296
+
297
+ def algolia_constraint_passes?(object, constraint)
298
+ case constraint
299
+ when Symbol
300
+ object.send(constraint)
301
+ when String
302
+ object.send(constraint.to_sym)
303
+ when Enumerable
304
+ # All constraints must pass
305
+ constraint.all? { |inner_constraint| algolia_constraint_passes?(object, inner_constraint) }
306
+ else
307
+ if constraint.respond_to?(:call) # Proc
308
+ constraint.call(object)
309
+ else
310
+ raise ArgumentError, "Unknown constraint type: #{constraint} (#{constraint.class})"
311
+ end
312
+ end
313
+ end
265
314
  end
266
315
 
267
316
  # these are the instance methods included
268
317
  module InstanceMethods
269
- def index!
270
- self.class.index!(self, synchronous?)
318
+
319
+ def self.included(base)
320
+ base.instance_eval do
321
+ alias_method :index!, :algolia_index! unless method_defined? :index!
322
+ alias_method :remove_from_index!, :algolia_remove_from_index! unless method_defined? :remove_from_index!
323
+ end
324
+ end
325
+
326
+ def algolia_index!
327
+ self.class.algolia_index!(self, algolia_synchronous?)
271
328
  end
272
329
 
273
- def remove_from_index!
274
- self.class.remove_from_index!(self, synchronous?)
330
+ def algolia_remove_from_index!
331
+ self.class.algolia_remove_from_index!(self, algolia_synchronous?)
275
332
  end
276
333
 
277
334
  private
278
335
 
279
- def synchronous?
280
- @synchronous == true
336
+ def algolia_synchronous?
337
+ @algolia_synchronous == true
281
338
  end
282
339
 
283
- def mark_synchronous
284
- @synchronous = true
340
+ def algolia_mark_synchronous
341
+ @algolia_synchronous = true
285
342
  end
286
343
 
287
- def mark_for_auto_indexing
288
- @auto_indexing = true
344
+ def algolia_mark_for_auto_indexing
345
+ @algolia_auto_indexing = true
289
346
  end
290
347
 
291
- def mark_must_reindex
292
- @must_reindex = new_record? || self.class.must_reindex?(self)
348
+ def algolia_mark_must_reindex
349
+ @algolia_must_reindex = new_record? || self.class.algolia_must_reindex?(self)
293
350
  true
294
351
  end
295
352
 
296
- def perform_index_tasks
297
- return if !@auto_indexing || @must_reindex == false
298
- index!
299
- remove_instance_variable(:@auto_indexing) if instance_variable_defined?(:@auto_indexing)
300
- remove_instance_variable(:@synchronous) if instance_variable_defined?(:@synchronous)
301
- remove_instance_variable(:@must_reindex) if instance_variable_defined?(:@must_reindex)
353
+ def algolia_perform_index_tasks
354
+ return if !@algolia_auto_indexing || @algolia_must_reindex == false
355
+ algolia_index!
356
+ remove_instance_variable(:@algolia_auto_indexing) if instance_variable_defined?(:@algolia_auto_indexing)
357
+ remove_instance_variable(:@algolia_synchronous) if instance_variable_defined?(:@algolia_synchronous)
358
+ remove_instance_variable(:@algolia_must_reindex) if instance_variable_defined?(:@algolia_must_reindex)
302
359
  end
303
360
  end
304
361
  end
data/spec/spec_helper.rb CHANGED
@@ -15,4 +15,6 @@ AlgoliaSearch.configuration = { application_id: ENV['ALGOLIA_APPLICATION_ID'], a
15
15
 
16
16
  RSpec.configure do |c|
17
17
  c.mock_with :rspec
18
+ c.filter_run focus: true
19
+ c.run_all_when_everything_filtered = true
18
20
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: algoliasearch-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.7.0
4
+ version: 1.7.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Algolia