107 lines
3.1 KiB
Ruby
107 lines
3.1 KiB
Ruby
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
|