mitukiii/tumblife-for-ruby

View on GitHub
lib/tumblife/response/raise_client_error.rb

Summary

Maintainability
A
0 mins
Test Coverage
require 'faraday'
require 'tumblife/error'

module Tumblife
  module Response
    class RaiseClientError < Faraday::Response::Middleware
      def on_complete(env)
        case env[:status].to_i
        when 400
          raise Tumblife::BadRequest.new(error_message(env))
        when 401
          raise Tumblife::NotAuthorized.new(error_message(env))
        when 404
          raise Tumblife::NotFound.new(error_message(env))
        when 400...500
          raise Tumblife::BadRequest.new(error_message(env))
        end
      end

      private
      def error_message(env)
        [
         env[:method].to_s.upcase,
         env[:url].to_s,
         env[:status],
         error_body(env[:body])
        ].join(': ')
      end

      def error_body(body)
        if body.nil?
          nil
        elsif body['meta'] && body['meta']['msg']
          body['meta']['msg']
        end
      end
    end
  end
end