algoliasearch 1.2.11 → 1.2.12

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: 128d59909c267e976baa312097edd9519eb92a6f
4
- data.tar.gz: e770982f18181545c66310809c06998401f61ac7
3
+ metadata.gz: ce03495d8a65c3fc3df2ecce17d405ea3b06ec10
4
+ data.tar.gz: ce3aca4b079c7ae6c904bc72ed8a717e4d6d052f
5
5
  SHA512:
6
- metadata.gz: df02e9a483a05a462ee68994d8dfb90021540e85da394805906481126730c3b402b3fb409c4dbcf973b05def05ed8c363208d5838a2cc3ae8535982903f31528
7
- data.tar.gz: 76d1f9897e16c3c919e8db4cf508eaff64f92b04bba77f87cd974d7d544c7aff6eef2c3d8b3acfdd6e5a4fe287466ab6d840368b00b363ec8bed6e2e169dc1fb
6
+ metadata.gz: 496951be33beaee2a259bdacd641774f7718644ac5f36b2d70b71420e715db3f6db3341de6ff8a955224cf46e184f13421ab3d26a76765a747f88526001ce5b9
7
+ data.tar.gz: 782d7260a5083a9d2c34006694cd94d393f8ec658a20fd209eca9b352a286df0cd081f46c179e4578f2d01a4e6c34a32aa5664dae79bb45e8522f77a06384699
data/ChangeLog CHANGED
@@ -1,5 +1,14 @@
1
1
  CHANGELOG
2
2
 
3
+ 2014-10-08 1.2.12
4
+
5
+ * Upgrade to httpclient 2.4
6
+ * Do not reset the timeout on each requests
7
+
8
+ 2014-09-14 1.2.11
9
+
10
+ * Ability to update API keys
11
+
3
12
  2014-08-22 1.2.10
4
13
 
5
14
  * Using Digest to remove "Digest::Digest is deprecated; Use Digest" warning (author: @dglancy)
data/Gemfile CHANGED
@@ -1,6 +1,6 @@
1
1
  source 'http://rubygems.org'
2
2
 
3
- gem 'httpclient', '~> 2.3'
3
+ gem 'httpclient', '~> 2.4'
4
4
  gem 'json', '>= 1.5.1'
5
5
  gem 'rubysl', '~> 2.0', :platform => :rbx
6
6
 
@@ -37,7 +37,7 @@ GEM
37
37
  net-http-persistent (>= 2.7)
38
38
  net-http-pipeline
39
39
  highline (1.6.21)
40
- httpclient (2.3.4.1)
40
+ httpclient (2.4.0)
41
41
  json (1.8.1)
42
42
  json (1.8.1-java)
43
43
  launchy (2.4.2)
@@ -325,7 +325,7 @@ DEPENDENCIES
325
325
  autotest-fsevent
326
326
  autotest-growl
327
327
  coveralls
328
- httpclient (~> 2.3)
328
+ httpclient (~> 2.4)
329
329
  json (>= 1.5.1)
330
330
  mime-types (< 2.0)
331
331
  rake
data/README.md CHANGED
@@ -148,6 +148,8 @@ puts index.search('jim').to_json
148
148
 
149
149
 
150
150
 
151
+
152
+
151
153
  Documentation
152
154
  ================
153
155
 
@@ -255,10 +257,10 @@ You can use the following optional arguments:
255
257
  * **prefixAll**: all query words are interpreted as prefixes,
256
258
  * **prefixLast**: only the last word is interpreted as a prefix (default behavior),
257
259
  * **prefixNone**: no query word is interpreted as a prefix. This option is not recommended.
258
- * **removeWordsIfNoResult**: This option to select a strategy to avoid having an empty result page. There is three different option:
259
- * **LastWords**: when a query does not return any result, the last word will be added as optional (the process is repeated with n-1 word, n-2 word, ... until there is results),
260
- * **FirstWords**: when a query does not return any result, the first word will be added as optional (the process is repeated with second word, third word, ... until there is results),
261
- * **None**: No specific processing is done when a query does not return any result (default behavior).
260
+ * **removeWordsIfNoResults**: This option to select a strategy to avoid having an empty result page. There is three different option:
261
+ * **lastWords**: when a query does not return any result, the last word will be added as optional (the process is repeated with n-1 word, n-2 word, ... until there is results),
262
+ * **firstWords**: when a query does not return any result, the first word will be added as optional (the process is repeated with second word, third word, ... until there is results),
263
+ * **none**: No specific processing is done when a query does not return any result (default behavior).
262
264
  * **typoTolerance**: if set to false, disable the typo-tolerance. Defaults to true.
263
265
  * **minWordSizefor1Typo**: the minimum number of characters in a query word to accept one typo in this word.<br/>Defaults to 4.
264
266
  * **minWordSizefor2Typos**: the minimum number of characters in a query word to accept two typos in this word.<br/>Defaults to 8.
@@ -6,12 +6,12 @@
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "algoliasearch"
9
- s.version = "1.2.11"
9
+ s.version = "1.2.12"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib"]
13
13
  s.authors = ["Algolia"]
14
- s.date = "2014-08-22"
14
+ s.date = "2014-10-08"
15
15
  s.description = "A simple Ruby client for the algolia.com REST API"
16
16
  s.email = "contact@algolia.com"
17
17
  s.extra_rdoc_files = [
@@ -36,9 +36,9 @@ module Algolia
36
36
  # and will return the parsed JSON body on success, if there is one.
37
37
  def request(uri, method, data = nil, timeout = nil)
38
38
  exceptions = []
39
- thread_local_hosts.each do |host|
39
+ thread_local_hosts(timeout).each do |host|
40
40
  begin
41
- return perform_request(host[:session], host[:base_url] + uri, method, data, timeout)
41
+ return perform_request(host[:session], host[:base_url] + uri, method, data)
42
42
  rescue AlgoliaProtocolError => e
43
43
  raise if e.code != Protocol::ERROR_TIMEOUT and e.code != Protocol::ERROR_UNAVAILABLE
44
44
  exceptions << e
@@ -58,55 +58,57 @@ module Algolia
58
58
  end
59
59
 
60
60
  def put(uri, body = {}, timeout = nil)
61
- request(uri, :PUT, body)
61
+ request(uri, :PUT, body, timeout)
62
62
  end
63
63
 
64
64
  def delete(uri, timeout = nil)
65
- request(uri, :DELETE)
65
+ request(uri, :DELETE, nil, timeout)
66
66
  end
67
67
 
68
68
  private
69
69
 
70
- # this method returns a thread-local array of sessions
71
- def thread_local_hosts
72
- Thread.current[:algolia_hosts] ||= hosts.map do |host|
70
+ # This method returns a thread-local array of sessions
71
+ #
72
+ # Since the underlying httpclient library resets the connections pool
73
+ # if you change any of its attributes, we cannot change the timeout
74
+ # of an HTTP session dynamically. That being said, having 1 pool per
75
+ # timeout appears to be the only acceptable solution
76
+ def thread_local_hosts(forced_timeout)
77
+ Thread.current[:algolia_hosts] ||= {}
78
+ Thread.current[:algolia_hosts][forced_timeout.to_s] ||= hosts.map do |host|
73
79
  hinfo = {
74
80
  :base_url => "http#{@ssl ? 's' : ''}://#{host}",
75
81
  :session => HTTPClient.new
76
82
  }
77
83
  hinfo[:session].transparent_gzip_decompression = true
78
84
  hinfo[:session].connect_timeout = @connect_timeout if @connect_timeout
79
- hinfo[:session].send_timeout = @send_timeout if @send_timeout
80
- hinfo[:session].receive_timeout = @receive_timeout if @receive_timeout
85
+ if forced_timeout
86
+ hinfo[:session].send_timeout = hinfo[:session].receive_timeout = forced_timeout
87
+ else
88
+ hinfo[:session].send_timeout = @send_timeout if @send_timeout
89
+ hinfo[:session].receive_timeout = @receive_timeout if @receive_timeout
90
+ end
81
91
  hinfo[:session].ssl_config.add_trust_ca File.join(File.dirname(__FILE__), '..', '..', 'resources', 'ca-bundle.crt')
82
92
  hinfo
83
93
  end
84
94
  end
85
95
 
86
96
  private
87
- def perform_request(session, url, method, data, timeout)
88
- original_send_timeout = session.send_timeout
89
- original_receive_timeout = session.receive_timeout
90
- begin
91
- session.send_timeout = session.receive_timeout = timeout if timeout
92
- response = case method
93
- when :GET
94
- session.get(url, { :header => @headers })
95
- when :POST
96
- session.post(url, { :body => data, :header => @headers })
97
- when :PUT
98
- session.put(url, { :body => data, :header => @headers })
99
- when :DELETE
100
- session.delete(url, { :header => @headers })
101
- end
102
- if response.code >= 400 || response.code < 200
103
- raise AlgoliaProtocolError.new(response.code, "Cannot #{method} to #{url}: #{response.content} (#{response.code})")
104
- end
105
- return JSON.parse(response.content)
106
- ensure
107
- session.send_timeout = original_send_timeout
108
- session.receive_timeout = original_receive_timeout
97
+ def perform_request(session, url, method, data)
98
+ response = case method
99
+ when :GET
100
+ session.get(url, { :header => @headers })
101
+ when :POST
102
+ session.post(url, { :body => data, :header => @headers })
103
+ when :PUT
104
+ session.put(url, { :body => data, :header => @headers })
105
+ when :DELETE
106
+ session.delete(url, { :header => @headers })
107
+ end
108
+ if response.code >= 400 || response.code < 200
109
+ raise AlgoliaProtocolError.new(response.code, "Cannot #{method} to #{url}: #{response.content} (#{response.code})")
109
110
  end
111
+ return JSON.parse(response.content)
110
112
  end
111
113
 
112
114
  end
@@ -347,7 +349,7 @@ module Algolia
347
349
 
348
350
  # Used mostly for testing. Lets you delete the api key global vars.
349
351
  def Algolia.destroy
350
- @@client = nil
352
+ @@client = Thread.current[:algolia_hosts] = nil
351
353
  self
352
354
  end
353
355
 
@@ -1,3 +1,3 @@
1
1
  module Algolia
2
- VERSION = "1.2.11"
2
+ VERSION = "1.2.12"
3
3
  end
@@ -614,13 +614,13 @@ describe 'Client' do
614
614
 
615
615
  it 'should generate secured api keys' do
616
616
  key = Algolia.generate_secured_api_key('my_api_key', '(public,user1)')
617
- key.should eq(OpenSSL::HMAC.hexdigest(OpenSSL::Digest::Digest.new('sha256'), 'my_api_key', '(public,user1)'))
617
+ key.should eq(OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha256'), 'my_api_key', '(public,user1)'))
618
618
  key = Algolia.generate_secured_api_key('my_api_key', '(public,user1)', 42)
619
- key.should eq(OpenSSL::HMAC.hexdigest(OpenSSL::Digest::Digest.new('sha256'), 'my_api_key', '(public,user1)42'))
619
+ key.should eq(OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha256'), 'my_api_key', '(public,user1)42'))
620
620
  key = Algolia.generate_secured_api_key('my_api_key', ['public'])
621
- key.should eq(OpenSSL::HMAC.hexdigest(OpenSSL::Digest::Digest.new('sha256'), 'my_api_key', 'public'))
621
+ key.should eq(OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha256'), 'my_api_key', 'public'))
622
622
  key = Algolia.generate_secured_api_key('my_api_key', ['public', ['premium','vip']])
623
- key.should eq(OpenSSL::HMAC.hexdigest(OpenSSL::Digest::Digest.new('sha256'), 'my_api_key', 'public,(premium,vip)'))
623
+ key.should eq(OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha256'), 'my_api_key', 'public,(premium,vip)'))
624
624
  end
625
625
 
626
626
  it 'Check attributes multipleQueries' do
metadata CHANGED
@@ -1,83 +1,83 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: algoliasearch
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.11
4
+ version: 1.2.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - Algolia
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-08-22 00:00:00.000000000 Z
11
+ date: 2014-10-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httpclient
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '2.3'
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: '2.3'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: json
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: 1.5.1
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.5.1
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: travis
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - '>='
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
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: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rake
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: rdoc
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
  description: A simple Ruby client for the algolia.com REST API
@@ -89,8 +89,8 @@ extra_rdoc_files:
89
89
  - LICENSE.txt
90
90
  - README.md
91
91
  files:
92
- - .rspec
93
- - .travis.yml
92
+ - ".rspec"
93
+ - ".travis.yml"
94
94
  - ChangeLog
95
95
  - Gemfile
96
96
  - Gemfile.lock
@@ -121,17 +121,17 @@ require_paths:
121
121
  - lib
122
122
  required_ruby_version: !ruby/object:Gem::Requirement
123
123
  requirements:
124
- - - '>='
124
+ - - ">="
125
125
  - !ruby/object:Gem::Version
126
126
  version: '0'
127
127
  required_rubygems_version: !ruby/object:Gem::Requirement
128
128
  requirements:
129
- - - '>='
129
+ - - ">="
130
130
  - !ruby/object:Gem::Version
131
131
  version: '0'
132
132
  requirements: []
133
133
  rubyforge_project:
134
- rubygems_version: 2.4.1
134
+ rubygems_version: 2.2.2
135
135
  signing_key:
136
136
  specification_version: 4
137
137
  summary: A simple Ruby client for the algolia.com REST API