48 lines
No EOL
1.6 KiB
Ruby
48 lines
No EOL
1.6 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module CollectionErrors
|
|
# Base class for all collection-related errors
|
|
class CollectionError < StandardError
|
|
attr_reader :http_status, :code
|
|
|
|
def initialize(message = nil, http_status: :unprocessable_entity, code: nil)
|
|
super(message)
|
|
@http_status = http_status
|
|
@code = code || self.class.name.demodulize.underscore
|
|
end
|
|
|
|
def to_hash
|
|
{
|
|
error: {
|
|
type: self.class.name.demodulize,
|
|
message: message,
|
|
code: code
|
|
}
|
|
}
|
|
end
|
|
end
|
|
|
|
# Raised when a collection item cannot be found
|
|
class CollectionItemNotFound < CollectionError
|
|
def initialize(item_type = 'item', item_id = nil)
|
|
message = item_id ? "Collection #{item_type} with ID #{item_id} not found" : "Collection #{item_type} not found"
|
|
super(message, http_status: :not_found)
|
|
end
|
|
end
|
|
|
|
# Raised when trying to add a duplicate character to collection
|
|
class DuplicateCharacter < CollectionError
|
|
def initialize(character_id = nil)
|
|
message = character_id ? "Character #{character_id} already exists in your collection" : "Character already exists in your collection"
|
|
super(message, http_status: :conflict)
|
|
end
|
|
end
|
|
|
|
# Raised when trying to add a duplicate job accessory to collection
|
|
class DuplicateJobAccessory < CollectionError
|
|
def initialize(accessory_id = nil)
|
|
message = accessory_id ? "Job accessory #{accessory_id} already exists in your collection" : "Job accessory already exists in your collection"
|
|
super(message, http_status: :conflict)
|
|
end
|
|
end
|
|
end |