lib/algolia/client.rb in algoliasearch-1.3.0 vs lib/algolia/client.rb in algoliasearch-1.3.1
- old
+ new
@@ -8,15 +8,16 @@
module Algolia
# A class which encapsulates the HTTPS communication with the Algolia
# API server. Uses the HTTPClient library for low-level HTTP communication.
class Client
- attr_reader :ssl, :hosts, :application_id, :api_key, :headers, :connect_timeout, :send_timeout, :receive_timeout, :search_timeout
+ attr_reader :ssl, :ssl_version, :hosts, :application_id, :api_key, :headers, :connect_timeout, :send_timeout, :receive_timeout, :search_timeout
def initialize(data = {})
@ssl = data[:ssl].nil? ? true : data[:ssl]
+ @ssl_version = data[:ssl_version].nil? ? nil : data[:ssl_version]
@application_id = data[:application_id]
@api_key = data[:api_key]
@hosts = (data[:hosts] || 1.upto(3).map { |i| "#{@application_id}-#{i}.algolia.net" }).shuffle
@connect_timeout = data[:connect_timeout]
@send_timeout = data[:send_timeout]
@@ -38,11 +39,11 @@
exceptions = []
thread_local_hosts(timeout).each do |host|
begin
return perform_request(host[:session], host[:base_url] + uri, method, data)
rescue AlgoliaProtocolError => e
- raise if e.code != Protocol::ERROR_TIMEOUT and e.code != Protocol::ERROR_UNAVAILABLE
+ raise if e.code == Protocol::ERROR_BAD_REQUEST or e.code == Protocol::ERROR_FORBIDDEN or e.code == Protocol::ERROR_NOT_FOUND
exceptions << e
rescue => e
exceptions << e
end
end
@@ -74,12 +75,14 @@
# of an HTTP session dynamically. That being said, having 1 pool per
# timeout appears to be the only acceptable solution
def thread_local_hosts(forced_timeout)
Thread.current[:algolia_hosts] ||= {}
Thread.current[:algolia_hosts][forced_timeout.to_s] ||= hosts.map do |host|
+ client = HTTPClient.new
+ client.ssl_config.ssl_version = @ssl_version if @ssl && @ssl_version
hinfo = {
:base_url => "http#{@ssl ? 's' : ''}://#{host}",
- :session => HTTPClient.new
+ :session => client
}
hinfo[:session].transparent_gzip_decompression = true
hinfo[:session].connect_timeout = @connect_timeout if @connect_timeout
if forced_timeout
hinfo[:session].send_timeout = hinfo[:session].receive_timeout = forced_timeout