Sha256: cf3cdacf65974739a95e928b97b9e4ee189e01e636a316e0817be56d4e92fa23

Contents?: true

Size: 1.74 KB

Versions: 4

Compression:

Stored size: 1.74 KB

Contents

require 'faraday'
# Default adapter needs to be required to be registered
require 'faraday/net_http_persistent' unless Faraday::VERSION < '1'
require 'chalk_ruby/error'

module ChalkRuby
  module Http
    class HttpRequesterChalk
      include Helpers

      # @param requester [ChalkRuby::Http::HttpRequester] requester used for sending requests.
      #
      def initialize(requester:)
        @http_requester = requester
      end

      def send_request(method:, host:, path:, timeout:, connect_timeout:, headers:, body:)
        response = @http_requester.send_request(
          host: host,
          method: method,
          path: path,
          body: body && to_json(body: body),
          headers: headers,
          timeout: timeout,
          connect_timeout: connect_timeout
        )

        if response.has_timed_out
          raise ChalkHttpError.new(code: Defaults::ERROR_TIMED_OUT, message: 'Request timed out')
        end

        if response.network_failure
          raise ChalkHttpError.new(code: 502, message: 'Network failure')
        end

        unless success?(http_response_code: response.status)
          begin
            decoded_error = json_to_hash(json: response.error, symbolize_keys: true)
            message = get_option(hash: decoded_error, key: 'description')
          rescue MultiJson::ParseError
            message = response.error
          ensure
            raise ChalkHttpError.new(
              code: response.status,
              message: message
            )
          end
        end
        json_to_hash(json: response.body, symbolize_keys: true)
      end

      private

      def success?(http_response_code:)
        !http_response_code.nil? && (http_response_code.to_i / 100).floor == 2
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
chalk_ruby-0.2.2 lib/chalk_ruby/http/http_requester_chalk.rb
chalk_ruby-0.2.1 lib/chalk_ruby/http/http_requester_chalk.rb
chalk_ruby-0.2.0 lib/chalk_ruby/http/http_requester_chalk.rb
chalk_ruby-0.1.4 lib/chalk_ruby/http/http_requester_chalk.rb