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