cartodb-4.42/lib/carto/errors.rb

107 lines
3.1 KiB
Ruby
Raw Normal View History

2024-04-06 13:25:13 +08:00
module Carto
class CartoError < StandardError
attr_reader :message, :status, :user_message, :errors_cause, :headers
def initialize(message, status, user_message: message, errors_cause: nil, headers: nil)
@message = message
@status = status
@user_message = user_message
@errors_cause = errors_cause
@headers = headers
end
def self.with_full_messages(active_record_exception)
new(active_record_exception.record.errors.full_messages.join(', '))
end
end
class ParamInvalidError < CartoError
def initialize(parameter, valid_values = nil)
extra_message = valid_values ? " Valid values are one of #{valid_values}" : ''
super("Wrong '#{parameter}' parameter value.#{extra_message}", 400)
end
end
class ParamCombinationInvalidError < CartoError
def initialize(parameter, valid_values)
super("Wrong '#{parameter}' parameter combination. Valid values to combine: #{valid_values}", 400)
end
end
class UUIDParameterFormatError < CartoError
def initialize(parameter:, value:, status: 400)
super("Parameter not UUID format. Parameter: #{parameter}. Value: #{value}", status)
end
end
class ExpiredSessionError < CartoError
def initialize(message = "Your session has expired.", status = 401)
super(message, status)
end
end
class UnauthorizedError < CartoError
def initialize(message = "You don't have permission to access that resource", status = 403)
super(message, status)
end
end
class PasswordConfirmationError < CartoError
def initialize(message = "Confirmation password sent does not match your current password", status = 403)
super(message, status)
end
end
class LoadError < CartoError
def initialize(message, status = 404, errors_cause: nil)
super(message, status, errors_cause: errors_cause)
end
end
class ProtectedVisualizationLoadError < LoadError
def initialize(visualization)
@visualization = visualization
super('Visualization not viewable', 403, errors_cause: 'privacy_password')
end
attr_reader :visualization
end
class UnprocesableEntityError < CartoError
def initialize(message, status = 422)
super(message, status)
end
end
class RelationDoesNotExistError < UnprocesableEntityError
def initialize(error_messages, error_relations)
super(error_messages.join(', '))
@user_message = "#{error_relations.join(', ')} don't exist."
end
end
class MissingParamsError < CartoError
def initialize(missing_params, status = 400)
super("The following required params are missing: #{missing_params.join(', ')}", status)
end
end
class InvalidParameterFormatError < CartoError
def initialize(parameter, extra_message = nil)
super("Wrong '#{parameter}' parameter value. #{extra_message}", 422)
end
end
class PaymentRequiredError < CartoError
def initialize(message = "Payment Required")
super(message, 402)
end
end
class QuotaExceededError < PaymentRequiredError
def initialize(message = "Your quota has been exceeded")
super(message)
end
end
end