lib/crate_ruby/client.rb in crate_ruby-0.0.7 vs lib/crate_ruby/client.rb in crate_ruby-0.0.8

- old
+ new

@@ -30,15 +30,17 @@ # Currently only a single server is supported. Fail over will be implemented in upcoming versions # @param [Array] servers An Array of servers including ports [127.0.0.1:4200, 10.0.0.1:4201] # @param [opts] Optional paramters # * logger: Custom Logger + # * http_options [Hash]: Net::HTTP options (open_timeout, read_timeout) # @return [CrateRuby::Client] def initialize(servers = [], opts = {}) @servers = servers @servers << "#{DEFAULT_HOST}:#{DEFAULT_PORT}" if servers.empty? @logger = opts[:logger] || CrateRuby.logger + @http_options = opts[:http_options] || { read_timeout: 3600 } end def inspect %Q{#<CrateRuby::Client:#{object_id}>} end @@ -91,18 +93,19 @@ end # Executes a SQL statement against the Crate HTTP REST endpoint. # @param [String] sql statement to execute # @param [Array] args Array of values used for parameter substitution + # @param [Hash] Net::HTTP options (open_timeout, read_timeout) # @return [ResultSet] - def execute(sql, args = nil) + def execute(sql, args = nil, http_options = {}) @logger.debug sql req = Net::HTTP::Post.new("/_sql", initheader = {'Content-Type' => 'application/json'}) body = {"stmt" => sql} body.merge!({'args' => args}) if args req.body = body.to_json - response = request(req) + response = request(req, http_options) @logger.debug response.body success = case response.code when /^2\d{2}/ ResultSet.new response.body else @@ -205,11 +208,15 @@ def connection host, port = @servers.first.split(':'); Net::HTTP.new(host, port) end - def request(req) - connection.start { |http| http.request(req) } + def request(req, http_options = {}) + options = @http_options.merge(http_options) + connection.start do |http| + options.each { |opt, value| http.send("#{opt}=", value) } + http.request(req) + end end end -end \ No newline at end of file +end