algoliasearch 1.1.7 → 1.1.8

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: 7cc178ecc1fd486b092b7a19e9d04477f393578c
4
- data.tar.gz: d9bfe9f943ea4734d40cad2db135cfcfa8cde564
3
+ metadata.gz: 6e5c089266fdf23e0ad55f0e3abb8dd3df34c43c
4
+ data.tar.gz: 65779ff387f443477c45e4c816e52eca744873aa
5
5
  SHA512:
6
- metadata.gz: e22b08a8198b0e92a670bbbc82c932b3ab5aa8270f952948bf4b0fdaa3b52b65b6daf8ca7e43b8d9be64b4817b8ca2978a82d08a2b45baeff185521e784daccf
7
- data.tar.gz: e256f1cf45cdf56cf84384fedfa28acdaf273a6ab0ba7f8a0314084309b7b77dedc0b4df9be3b3300305099f20708dcae2c0a9f3a2a7f784df41611fa46fe689
6
+ metadata.gz: 640ba343d66fe502329d83e2e3d2c14503553f55e752af61d96997c84e0ffa8890709a2b8e3cc3df5bca303c2b2e2eb9ed9cfc99efcdf04422ff2f085362d8d1
7
+ data.tar.gz: 789b36b476cad2407a5a0ae8ac2ba38533d59d08d3edb1e3ce23d5197ed60d05954401b9d12b109bddd58b2c9a2933a5d1643b54af9d5b5006e1fb0aeb046d2b
data/README.md CHANGED
@@ -328,8 +328,9 @@ Batch writes
328
328
 
329
329
  You may want to perform multiple operations with one API call to reduce latency.
330
330
  We expose two methods to perform batch:
331
- * `addObjects`: add an array of object using automatic `objectID` assignement
332
- * `saveObjects`: add or update an array of object that contains an `objectID` attribute
331
+ * `add_objects`: add an array of object using automatic `objectID` assignement
332
+ * `save_objects`: add or update an array of object that contains an `objectID` attribute
333
+ * `partial_update_objects`: partially update an array of objects that contain an `objectID` attribute (only specified attributes will be updated, other will remain unchanged)
333
334
 
334
335
  Example using automatic `objectID` assignement:
335
336
  ```ruby
@@ -349,6 +350,14 @@ res = index.save_objects([{"firstname" => "Jimmie",
349
350
  "objectID" => "myID2"}])
350
351
  ```
351
352
 
353
+ Example that update only the `firstname` attribute:
354
+ ```ruby
355
+ res = index.partial_update_objects([{"firstname" => "Jimmie",
356
+ "objectID" => "SFO"},
357
+ {"firstname" => "Warren",
358
+ "objectID" => "myID2"}]);
359
+ ```
360
+
352
361
  Security / User API Keys
353
362
  -------------
354
363
 
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "algoliasearch"
8
- s.version = "1.1.7"
8
+ s.version = "1.1.8"
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-08"
12
+ s.date = "2013-11-26"
13
13
  s.description = "A simple Ruby client for the algolia.com REST API"
14
14
  s.email = "contact@algolia.com"
15
15
  s.extra_rdoc_files = [
@@ -26,6 +26,7 @@ module Algolia
26
26
  # AlgoliaProtocolError if the response has an error status code,
27
27
  # and will return the parsed JSON body on success, if there is one.
28
28
  def request(uri, method, data = nil)
29
+ exceptions = []
29
30
  thread_local_hosts.each do |host|
30
31
  begin
31
32
  session = host["session"]
@@ -42,17 +43,17 @@ module Algolia
42
43
  session.http_delete
43
44
  end
44
45
  if session.response_code >= 400 || session.response_code < 200
45
- raise AlgoliaProtocolError.new(session.response_code, "#{method} #{session.url}: #{session.body_str}")
46
+ raise AlgoliaProtocolError.new(session.response_code, "Cannot #{method} to #{session.url}: #{session.body_str} (#{session.response_code})")
46
47
  end
47
48
  return JSON.parse(session.body_str)
48
49
  rescue AlgoliaProtocolError => e
49
- if e.code != Protocol::ERROR_TIMEOUT and e.code != Protocol::ERROR_UNAVAILABLE
50
- raise
51
- end
50
+ raise if e.code != Protocol::ERROR_TIMEOUT and e.code != Protocol::ERROR_UNAVAILABLE
51
+ exceptions << e
52
52
  rescue Curl::Err::CurlError => e
53
+ exceptions << e
53
54
  end
54
55
  end
55
- raise AlgoliaProtocolError.new(0, "Cannot reach any hosts")
56
+ raise AlgoliaProtocolError.new(0, "Cannot reach any host: #{exceptions.map { |e| e.to_s }.join(', ')}")
56
57
  end
57
58
 
58
59
  def get(uri)
data/lib/algolia/index.rb CHANGED
@@ -197,7 +197,7 @@ module Algolia
197
197
 
198
198
  # Override the content of several objects and wait indexing
199
199
  #
200
- # @param object contains the javascript object to save, the object must contains an objectID attribute
200
+ # @param object contains the object to save, the object must contains an objectID attribute
201
201
  #
202
202
  def save_objects!(objs)
203
203
  res = save_objects(objs)
@@ -208,17 +208,42 @@ module Algolia
208
208
  #
209
209
  # Update partially an object (only update attributes passed in argument)
210
210
  #
211
- # @param obj contains the javascript attributes to override, the
211
+ # @param obj contains the object attributes to override, the
212
212
  # object must contains an objectID attribute
213
213
  #
214
214
  def partial_update_object(obj)
215
215
  Algolia.client.post(Protocol.partial_object_uri(name, obj["objectID"]), obj.to_json)
216
216
  end
217
217
 
218
+ #
219
+ # Partially Override the content of several objects
220
+ #
221
+ # @param objs contains an array of objects to update (each object must contains a objectID attribute)
222
+ #
223
+ def partial_update_objects(objs)
224
+ requests = []
225
+ objs.each do |obj|
226
+ requests.push({"action" => "partialUpdateObject", "objectID" => obj["objectID"], "body" => obj})
227
+ end
228
+ request = {"requests" => requests};
229
+ Algolia.client.post(Protocol.batch_uri(name), request.to_json)
230
+ end
231
+
232
+ #
233
+ # Partially Override the content of several objects
234
+ #
235
+ # @param objs contains an array of objects to update (each object must contains a objectID attribute)
236
+ #
237
+ def partial_update_objects!(objs)
238
+ res = partial_update_objects(obj)
239
+ wait_task(res["taskID"])
240
+ return res
241
+ end
242
+
218
243
  #
219
244
  # Update partially an object (only update attributes passed in argument) and wait indexing
220
245
  #
221
- # @param obj contains the javascript attributes to override, the
246
+ # @param obj contains the attributes to override, the
222
247
  # object must contains an objectID attribute
223
248
  #
224
249
  def partial_update_object!(obj)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: algoliasearch
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.7
4
+ version: 1.1.8
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-08 00:00:00.000000000 Z
11
+ date: 2013-11-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: curb
@@ -113,7 +113,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
113
113
  version: '0'
114
114
  requirements: []
115
115
  rubyforge_project:
116
- rubygems_version: 2.0.12
116
+ rubygems_version: 2.0.3
117
117
  signing_key:
118
118
  specification_version: 4
119
119
  summary: A simple Ruby client for the algolia.com REST API