cartodb/lib/carto/errors.rb
2020-06-15 10:58:47 +08:00

82 lines
2.4 KiB
Ruby

module Carto
class CartoError < StandardError
attr_reader :message, :status, :user_message, :errors_cause
def initialize(message, status, user_message: message, errors_cause: nil)
@message = message
@status = status
@user_message = user_message
@errors_cause = errors_cause
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 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
end