Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
kiwi-errors / lib / kiwi / errors / handler.rb
Size: Mime:
# frozen_string_literal: true

module Kiwi
  module Errors
    # Error Renderer
    module Handler
      def api_errors(exception)
        if exception.is_a? Kiwi::Errors::ApiError
          api_error(exception)
        elsif exception.is_a? Kiwi::Errors::RecordInvalid
          record_invalid(exception)
        else
          normal_error(exception)
        end
      end

      def api_error(exception)
        status = exception.status || 500
        code = exception.code || '9999'
        render_error(
          status, code, exception.class.name,
          exception.message
        )
      end

      def normal_error(exception)
        status = 500
        code = exception
        render_error(
          status, code, exception.class.name,
          exception.message
        )
      end

      def record_invalid(exception) # rubocop:disable Metrics/MethodLength
        formatted_errors = []
        used_fields = []
        record = exception.record

        record.errors.each do |error, value|
          next if used_fields.include? error.to_s
          formatted_error = {
            field: error.to_s,
            detail: value[0]
          }
          formatted_errors.push formatted_error
          used_fields.push error.to_s
        end
        formatted_errors = formatted_errors.sort_by { |k| k[:field] }

        render_error(422,
                     'unprocessable_entity',
                     'Unprocessable Entity',
                     formatted_errors)
      end
    end
  end
end