algoliasearch-rails 1.4.5 → 1.5.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 385a4a1b2e2ba4fdfe5fd4a548cb8cd999e337e9
4
- data.tar.gz: 5ed6fa59120bfd28e4ba395e969645c422bc3cb6
3
+ metadata.gz: 3f261644d4f85253064f4683e6815c3fc4ef8a36
4
+ data.tar.gz: 47b1f0cfccd530d7fd5987fa82019abc4363e4da
5
5
  SHA512:
6
- metadata.gz: 7d2ce611df1b22d8c81d2ab76896a6cd9236ce2f7c2b822d956a43bbc70e3cbaad6e219d7ad956a6ee6a276195b81101f05b52da8695a64bd1a40eedfa94665f
7
- data.tar.gz: 3beeb4d604280581b6a22831b9fc29a37bfd1117f010f21f56af56fdcb360275294ba8036e7853f0e0c3f96fe300226f0c56f5dedf239d2a656451c70ba76272
6
+ metadata.gz: f596456245ab08f64f23f7fb908d839489fb1bedfcf2b36752a67d7c561f52ab974e87a40c3a57614334b0ae56345d8e24779b54f3b561e639f7f741d767ed5f
7
+ data.tar.gz: 77cd27fb4231f8e6c4fc7076993557d23f17f89edec86aa299c03fe2807c37fce722b4aac9317446079cfa597a535e6dc1d081bdfa984125172eff8c997f888b
data/ChangeLog CHANGED
@@ -1,5 +1,9 @@
1
1
  CHANGELOG
2
2
 
3
+ 2013-12-03 1.5.1
4
+
5
+ * ability to specify which attribute is used as objectID
6
+
3
7
  2013-11-29 1.4.5
4
8
 
5
9
  * updated algoliasearch-client-js to 2.3.3
data/README.md CHANGED
@@ -89,7 +89,7 @@ p Contact.search("jon doe")
89
89
  Options
90
90
  ----------
91
91
 
92
- Each time a record is saved; it will be - asynchronously - indexed. In the other hand, each time a record is destroyed, it will be - asynchronoulsy - removed from the index.
92
+ Each time a record is saved; it will be - asynchronously - indexed. On the other hand, each time a record is destroyed, it will be - asynchronously - removed from the index.
93
93
 
94
94
  You can disable auto-indexing and auto-removing setting the following options:
95
95
 
@@ -164,6 +164,17 @@ class Contact < ActiveRecord::Base
164
164
  end
165
165
  ```
166
166
 
167
+ By default, the `objectID` is based on your record's `id`. You can change this behavior specifying the `:id` option (be sure to use a uniq field).
168
+
169
+ ```ruby
170
+ class UniqUser < ActiveRecord::Base
171
+ include AlgoliaSearch
172
+
173
+ algoliasearch id: :uniq_name do
174
+ end
175
+ end
176
+ ```
177
+
167
178
  Indexing
168
179
  ---------
169
180
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.4.5
1
+ 1.5.1
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "algoliasearch-rails"
8
- s.version = "1.4.5"
8
+ s.version = "1.5.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Algolia"]
12
- s.date = "2013-11-29"
12
+ s.date = "2013-12-03"
13
13
  s.description = "AlgoliaSearch integration to your favorite ORM"
14
14
  s.email = "contact@algolia.com"
15
15
  s.extra_rdoc_files = [
@@ -124,7 +124,7 @@ module AlgoliaSearch
124
124
  ensure_init
125
125
  last_task = nil
126
126
  find_in_batches(batch_size: batch_size) do |group|
127
- objects = group.map { |o| @index_settings.get_attributes(o).merge 'objectID' => o.id.to_s }
127
+ objects = group.map { |o| @index_settings.get_attributes(o).merge 'objectID' => object_id_of(o) }
128
128
  last_task = @index.save_objects(objects)
129
129
  end
130
130
  @index.wait_task(last_task["taskID"]) if last_task and synchronous == true
@@ -134,9 +134,9 @@ module AlgoliaSearch
134
134
  return if @without_auto_index_scope
135
135
  ensure_init
136
136
  if synchronous
137
- @index.add_object!(@index_settings.get_attributes(object), object.id.to_s)
137
+ @index.add_object!(@index_settings.get_attributes(object), object_id_of(object))
138
138
  else
139
- @index.add_object(@index_settings.get_attributes(object), object.id.to_s)
139
+ @index.add_object(@index_settings.get_attributes(object), object_id_of(object))
140
140
  end
141
141
  end
142
142
 
@@ -144,9 +144,9 @@ module AlgoliaSearch
144
144
  return if @without_auto_index_scope
145
145
  ensure_init
146
146
  if synchronous
147
- @index.delete_object!(object.id.to_s)
147
+ @index.delete_object!(object_id_of(object))
148
148
  else
149
- @index.delete_object(object.id.to_s)
149
+ @index.delete_object(object_id_of(object))
150
150
  end
151
151
  end
152
152
 
@@ -160,7 +160,7 @@ module AlgoliaSearch
160
160
  ensure_init
161
161
  json = @index.search(q, Hash[settings.map { |k,v| [k.to_s, v.to_s] }])
162
162
  results = json['hits'].map do |hit|
163
- o = full_const_get(@options[:type].to_s).find(hit['objectID'])
163
+ o = full_const_get(@options[:type].to_s).where(object_id_method => hit['objectID']).first
164
164
  o.highlight_result = hit['_highlightResult']
165
165
  o
166
166
  end
@@ -175,7 +175,7 @@ module AlgoliaSearch
175
175
  end
176
176
 
177
177
  def must_reindex?(object)
178
- return true if object.id_changed?
178
+ return true if object_id_changed?(object)
179
179
  @index_settings.get_attributes(object).each do |k, v|
180
180
  changed_method = "#{k}_changed?"
181
181
  return true if object.respond_to?(changed_method) && object.send(changed_method)
@@ -191,6 +191,19 @@ module AlgoliaSearch
191
191
 
192
192
  private
193
193
 
194
+ def object_id_method
195
+ @options[:id] || @options[:object_id] || :id
196
+ end
197
+
198
+ def object_id_of(o)
199
+ o.send(object_id_method).to_s
200
+ end
201
+
202
+ def object_id_changed?(o)
203
+ m = "#{object_id_method}_changed?"
204
+ o.respond_to?(m) ? o.send(m) : false
205
+ end
206
+
194
207
  def index_settings_changed?(prev, current)
195
208
  return true if prev.nil?
196
209
  current.each do |k, v|
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: algoliasearch-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.5
4
+ version: 1.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Algolia
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-11-29 00:00:00.000000000 Z
11
+ date: 2013-12-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json