Repository URL to install this package:
|
Version:
0.3.2 ▾
|
module Rapidash
# Rapidash::ResponseError
# Exception that gets raised if the response is an error (4xx or 5xx)
# Raised by Faraday::Response::RaiseRapidashError
# see lib/faraday/response/raise_rapidash_error.rb
#
# Formats a readable error message including HTTP status, method and requested URL
#
# Examples:
#
# client.posts.create!(title: '')
# Rapidash::ResponseError: 422 POST http://acme.com/api/v1/posts.json
#
# begin
# client.posts.create!(title: '')
# rescue Rapidash::ResponseError => response
# response.status # => 422
# response.method # => "POST"
# response.url # => "http://acme.com/api/v1/posts.json"
# response.body # => "{"errors":["title can't be blank", "body can't be blank"]}"
# end
#
# Hint: Can be easily sub-classed to provide a custom exception handler class
# with specific error formatting. Defining an `errors` method that returns a String or Array
# will include the errors in the exception message:
#
# class MyCustomResponseError < Rapidash::ResponseError
# def errors
# data = JSON.parse(body)
# data['errors']
# end
# end
#
# Rapidash.response_exception_class = MyCustomResponseError
#
# client.posts.create!(title: '')
# MyCustomResponseError: 422 POST http://acme.com/api/v1/posts.json | Errors: title can't be blank, body can't be blank
#
# begin
# client.posts.create!(title: '')
# rescue Rapidash::ResponseError => response
# response.status # => 422
# response.errors # => ["title can't be blank", "body can't be blank"]
# end
#
class ResponseError < StandardError
attr_reader :response, :body, :status, :method, :url
def initialize(response = nil)
@response = response
@body = response[:body]
@status = response[:status].to_i
@method = response[:method].to_s.upcase
@url = response[:url]
super
end
def to_s
msg = "#{status} #{method} #{url}"
if respond_to?(:errors) && !(errors.blank?)
errors.map(&:to_s).join(', ') if errors.kind_of?(Array)
msg = "#{msg} | Errors: #{errors.to_s}"
end
msg
end
end
end