Sha256: d649afe0547430bc4fc19ab837f098e59c5ddeb93e4b09a6e0af181ac5418cbd

Contents?: true

Size: 1.11 KB

Versions: 3

Compression:

Stored size: 1.11 KB

Contents

module Monri
  class ApiHttpResponse

    # @return [Hash]
    attr_reader :body
    # @return [String]
    attr_reader :response_body
    # @return [Integer]
    attr_reader :code
    # @return [Hash]
    attr_reader :headers
    # @return [Exception]
    attr_reader :exception

    # @param [Net::HTTPResponse] response
    # @return [Monri::ApiHttpResponse]
    def from_net(response)

      @code = response.code.to_i
      @headers = response.each_header.to_h
      @response_body = response.body
      @body = begin
        JSON.parse(response.body, symbolize_names: true)
      rescue
        @exception = create_exception('JSON parsing failed')
        nil
      end
      unless success?
        @exception = create_exception("Request failed, got status code=#{code}")
      end
      self
    end

    def success?
      exception == nil && code >= 200 && code < 300
    end

    def failed?
      exception != nil
    end

    private

    # @param [String] message
    def create_exception(message)
      Monri::Errors::HttpRequestError.new(message, code: @code, body: @response_body, headers: @headers)
    end

  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
monri-0.3.0 lib/monri/api_http_response.rb
monri-0.2.0 lib/monri/api_http_response.rb
monri-0.1.0 lib/monri/api_http_response.rb