Sha256: 7ef48f73dee5921686dc2a2ede2f14d049853e9b23f70a58a99550af21a41a10

Contents?: true

Size: 1.33 KB

Versions: 5

Compression:

Stored size: 1.33 KB

Contents

module FlexCommerceApi
  module JsonApiClientExtension
    class StatusMiddleware < Faraday::Middleware
      def call(environment)
        request_env = environment.dup
        @app.call(environment).on_complete do |env|
          handle_status(env[:status], env, request_env)

          # look for meta[:status]
          if env[:body].is_a?(Hash)
            code = env[:body].fetch("meta", {}).fetch("status", 200).to_i
            handle_status(code, env, request_env)
          end
        end
      rescue Faraday::ConnectionFailed, Faraday::TimeoutError
        raise ::FlexCommerceApi::Error::ConnectionError, environment
      end

      protected

      def handle_status(code, env, request_environment)
        case code
          when 200..399
          when 400
            raise ::FlexCommerceApi::Error::BadRequest.new request_environment, env
          when 403, 401
            raise ::FlexCommerceApi::Error::AccessDenied.new request_environment, env
          when 404
            raise ::FlexCommerceApi::Error::NotFound, env[:url]
          when 400..499
            # some other error
          when 500..599
            raise ::FlexCommerceApi::Error::InternalServer.new request_environment, env
          else
            raise ::FlexCommerceApi::Error::UnexpectedStatus.new(code, env[:url])
        end
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
flex_commerce_api-0.8.3 lib/flex_commerce_api/json_api_client_extension/status_middleware.rb
flex_commerce_api-0.8.2 lib/flex_commerce_api/json_api_client_extension/status_middleware.rb
flex_commerce_api-0.8.1 lib/flex_commerce_api/json_api_client_extension/status_middleware.rb
flex_commerce_api-0.7 lib/flex_commerce_api/json_api_client_extension/status_middleware.rb
flex_commerce_api-0.6.57 lib/flex_commerce_api/json_api_client_extension/status_middleware.rb