class MidtransApi::Middleware::HandleResponseException

Constants

VALID_STATUSES

Public Class Methods

new(app) click to toggle source
Calls superclass method
# File lib/midtrans_api/middleware/handle_response_exception.rb, line 8
def initialize(app)
  super(app)
end

Public Instance Methods

call(env) click to toggle source
# File lib/midtrans_api/middleware/handle_response_exception.rb, line 12
def call(env)
  @app.call(env).on_complete do |response|
    validate_response(response.body)
  end
end

Private Instance Methods

validate_response(response) click to toggle source

rubocop:disable Metrics/CyclomaticComplexity

# File lib/midtrans_api/middleware/handle_response_exception.rb, line 21
def validate_response(response)
  json_response = JSON.parse(response)
  return true if VALID_STATUSES.include?(json_response['status_code'])

  case json_response['status_code']
  when '202'
    raise MidtransApi::Errors::PaymentDenied, json_response['status_message']
  when '300'
    raise MidtransApi::Errors::MovePermanently, json_response['status_message']
  when '400'
    raise MidtransApi::Errors::ValidationError, json_response['validation_messages'].first
  when '401'
    raise MidtransApi::Errors::AccessDenied, json_response['status_message']
  when '402'
    raise MidtransApi::Errors::UnauthorizedPayment, json_response['status_message']
  when '403'
    raise MidtransApi::Errors::ForbiddenRequest, json_response['status_message']
  when '404'
    raise MidtransApi::Errors::NotFound, json_response['status_message']
  when '405'
    raise MidtransApi::Errors::HttpNotAllowed, json_response['status_message']
  when '406'
    raise MidtransApi::Errors::DuplicateOrderId, json_response['status_message']
  when '408'
    raise MidtransApi::Errors::WrongDataType, json_response['status_message']
  when '409'
    raise MidtransApi::Errors::ManySameCardNumber, json_response['status_message']
  when '410'
    raise MidtransApi::Errors::MerchantAccountDeactivated, json_response['status_message']
  when '411'
    raise MidtransApi::Errors::ErrorTokenId, json_response['status_message']
  when '412'
    raise MidtransApi::Errors::CannotModifyTransaction, json_response['status_message']
  when '413'
    raise MidtransApi::Errors::MalformedSyntax, json_response['status_message']
  when '414'
    raise MidtransApi::Errors::RefundInvalidAmount, json_response['status_message']
  when '500'
    raise MidtransApi::Errors::InternalServerError, json_response['status_message']
  when '501'
    raise MidtransApi::Errors::FeatureNotAvailable, json_response['status_message']
  when '502'
    raise MidtransApi::Errors::BankConnectionProblem, json_response['status_message']
  when '503'
    raise MidtransApi::Errors::PartnerConnectionIssue, json_response['status_message']
  when '504'
    raise MidtransApi::Errors::FraudDetectionUnavailable, json_response['status_message']
  when '505'
    raise MidtransApi::Errors::PaymentReferenceUnavailable, json_response['status_message']
  else
    raise MidtransApi::Errors::UnknownError, json_response['status_message']
  end
end