Sha256: 87cca2c38119490a6d3214cdc9eca251fda362da1b4648f8933e8bad305abfc5

Contents?: true

Size: 1.61 KB

Versions: 1

Compression:

Stored size: 1.61 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 Transport
    class Transport
      include Helpers

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

      def request_simple(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)
          decoded_error = json_to_hash(json: response.error, symbolize_keys: true)
          raise ChalkHttpError.new(
            code: get_option(hash: decoded_error, key: 'status'),
            message: get_option(hash: decoded_error, key: 'message')
          )
        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

1 entries across 1 versions & 1 rubygems

Version Path
chalk_ruby-0.1.0 lib/chalk_ruby/transport/transport.rb