Sha256: eec631cafbc3eeb5f1aadf7ff7d1a524c366de9e6b8213a147803f7817b880a2

Contents?: true

Size: 1.9 KB

Versions: 9

Compression:

Stored size: 1.9 KB

Contents

require 'faraday'

# @private
module FaradayMiddleware
  # @private
  class RaiseHttpException < Faraday::Middleware
    def call(env)
      @app.call(env).on_complete do |response|
        case response[:status].to_i
        when 400
          raise FirebaseAdmin::BadRequest,
                error_message_400(response)
        when 404
          raise FirebaseAdmin::NotFound,
                error_message_400(response)
        when 429
          raise FirebaseAdmin::TooManyRequests,
                error_message_400(response)
        when 500
          raise FirebaseAdmin::InternalServerError,
                error_message_500(response, 'Something is technically wrong.')
        when 502
          raise FirebaseAdmin::BadGateway,
                error_message_500(response, 'The server returned an invalid or incomplete response.')
        when 503
          raise FirebaseAdmin::ServiceUnavailable,
                error_message_500(response, 'Firebase is rate limiting your requests.')
        when 504
          raise FirebaseAdmin::GatewayTimeout,
                error_message_500(response, '504 Gateway Time-out')
        end
      end
    end

    def initialize(app)
      super app
      @parser = nil
    end

    private

    def error_message_400(response)
      "#{response[:method].to_s.upcase} #{response[:url]}: #{response[:status]}#{error_body(response[:body])}"
    end

    def error_body(body)
      # body gets passed as a string, not sure if it is passed as something else from other spots?
      body = ::JSON.parse(body) if !body.nil? && !body.empty? && body.is_a?(String)

      if body.nil?
        nil
      elsif body['error'] && body['error']['message'] && !body['error']['message'].empty?
        ": #{body['error']['message']}"
      end
    end

    def error_message_500(response, body = nil)
      "#{response[:method].to_s.upcase} #{response[:url]}: #{response[:status]}: #{body}"
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
firebase-admin-0.3.0 lib/faraday/raise_http_exception.rb
firebase-admin-0.2.0 lib/faraday/raise_http_exception.rb
firebase-admin-0.1.6 lib/faraday/raise_http_exception.rb
firebase-admin-0.1.5 lib/faraday/raise_http_exception.rb
firebase-admin-0.1.4 lib/faraday/raise_http_exception.rb
firebase-admin-0.1.3 lib/faraday/raise_http_exception.rb
firebase-admin-0.1.2 lib/faraday/raise_http_exception.rb
firebase-admin-0.1.1 lib/faraday/raise_http_exception.rb
firebase-admin-0.1.0 lib/faraday/raise_http_exception.rb