Sha256: a3d9919d0c41a8305fd24e04ea57a80525d7124cb808d35cae9cfbb2546a19a8

Contents?: true

Size: 969 Bytes

Versions: 2

Compression:

Stored size: 969 Bytes

Contents

# frozen_string_literal: true

require 'faraday'

module Acumatica
  class ErrorHandler < Faraday::Middleware
    def initialize(app)
      super app
      @parser = nil
    end

    def call(request_env)
      @app.call(request_env).on_complete do |env|
        case env[:status]
        when 400
          raise Acumatica::BadRequest, env
        when 401
          raise Acumatica::Unauthorized, env
        when 500
          raise Acumatica::InternalServerError, env
        end
      end
    end
  end

  class Error < StandardError
    def initialize(env = {})
      super error_message(env)
    end

    def error_message(env)
      env[:body]["message"]
    end
  end

  class BadRequest < Error
    def error_message(env)
      "#{super(env)}: #{env[:body]['modelState'].values.join(',')}"
    end
  end

  class Unauthorized < Error
  end

  class InternalServerError < Error
    def error_message(env)
      env[:body]["exceptionMessage"]
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
acumatica-0.6.0 lib/acumatica/errors.rb
acumatica-0.5.0 lib/acumatica/errors.rb