Sha256: 604f70a252ae6f94d4bd0b7e3a79e8338ac5e0ef8c2f9659ad1830f6d7b4db4d

Contents?: true

Size: 887 Bytes

Versions: 8

Compression:

Stored size: 887 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!
      error = RequestError.new(
        code:    code,
        message: request_error_message,
        body:    parsed_body
      )
      raise error
    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.6.3 lib/myfinance/response.rb
myfinance-1.6.1 lib/myfinance/response.rb
myfinance-1.6.0 lib/myfinance/response.rb
myfinance-1.5.0 lib/myfinance/response.rb
myfinance-1.4.1 lib/myfinance/response.rb
myfinance-1.4.0 lib/myfinance/response.rb
myfinance-1.3.1 lib/myfinance/response.rb
myfinance-1.3.0 lib/myfinance/response.rb