algoliasearch 1.2.11 → 1.2.12

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: 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