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