Sha256: f4d1195ffe251480b77cfa5772a9d7c84059f8798ae375d09655c40afaee4e78

Contents?: true

Size: 834 Bytes

Versions: 3

Compression:

Stored size: 834 Bytes

Contents

require "rexpense/exception"

module Rexpense
  class RequestTimeout < Exception; end
  class RequestError < Exception; end

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

    def parsed_body(key = nil)
      return JSON.parse(body)[key] unless key.nil?
      JSON.parse(body)
    rescue JSON::ParserError
      {}
    end

    private

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

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

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
rexpense-2.1.0 lib/rexpense/response.rb
rexpense-2.0.0 lib/rexpense/response.rb
rexpense-1.0.0 lib/rexpense/response.rb