Sha256: dd83d6b38e1f22c49b19a8325bda7ac49e8e009cbf1f24ec7e452aca30e1c68c

Contents?: true

Size: 893 Bytes

Versions: 8

Compression:

Stored size: 893 Bytes

Contents

require "myfinance/exception"

module Myfinance
  RequestTimeout = Class.new(Exception)
  RequestError   = Class.new(Exception)

  class Response < SimpleDelegator
    def resolve!
      if success?
        block_given? ? yield(self) : self
      elsif timed_out?
        timeout!
      else
        error!
      end
    end

    def parsed_body(key = nil)
      return MultiJson.load(body)[key] unless key.nil?
      MultiJson.load(body)
    rescue MultiJson::ParseError
      {}
    end

    private

    def timeout!
      raise RequestTimeout
    end

    def error!
      raise RequestError.new(
        code:    code,
        message: request_error_message,
        body:    parsed_body,
        headers: headers
      )
    end

    def request_error_message
      return status_message if !status_message.nil? && status_message != ""
      parsed_body["error"] || ""
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
myfinance-1.8.3 lib/myfinance/response.rb
myfinance-1.8.2 lib/myfinance/response.rb
myfinance-1.8.1 lib/myfinance/response.rb
myfinance-1.8.0 lib/myfinance/response.rb
myfinance-1.7.0 lib/myfinance/response.rb
myfinance-1.6.6 lib/myfinance/response.rb
myfinance-1.6.5 lib/myfinance/response.rb
myfinance-1.6.4 lib/myfinance/response.rb