class Pendragon::Errors::Base
Class for handling HTTP error.
Attributes
headers[RW]
message[RW]
status[RW]
Public Class Methods
create(**options, &block)
click to toggle source
Creates a new error class.
@example
require 'pendragon/errors' BadRequest = Pendragon::Errors::Base.create(status: 400)
@option [Integer] status @option [Hash{String => String}] headers @option [String] message @return [Class]
# File lib/pendragon/errors.rb, line 21 def self.create(**options, &block) Class.new(self) do options.each { |k, v| define_singleton_method(k) { v } } class_eval(&block) if block_given? end end
default_headers()
click to toggle source
Returns default headers.
@return [Hash{String => String}] HTTP headers
# File lib/pendragon/errors.rb, line 39 def self.default_headers @default_headers ||= { 'Content-Type' => 'text/plain' } end
default_message()
click to toggle source
Returns default message.
@see [Rack::Utils::HTTP_STATUS_CODES] @return [String] default message for current status.
# File lib/pendragon/errors.rb, line 32 def self.default_message @default_message ||= Rack::Utils::HTTP_STATUS_CODES.fetch(status, 'server error').downcase end
new(headers: {}, status: self.class.status, message: self.class.default_message, **payload)
click to toggle source
Constructs an instance of Errors::Base
@option [Hash{String => String}] headers @option [Integer] status @option [String] message @options payload @return [Pendragon::Errors::Base]
Calls superclass method
# File lib/pendragon/errors.rb, line 50 def initialize(headers: {}, status: self.class.status, message: self.class.default_message, **payload) self.headers = self.class.default_headers.merge(headers) self.status, self.message = status, message parse_payload(**payload) if payload.kind_of?(Hash) && respond_to?(:parse_payload) super(message) end
Public Instance Methods
to_response()
click to toggle source
Converts self into response conformed Rack style.
@return [Array<Integer, Hash{String => String}, each>] response
# File lib/pendragon/errors.rb, line 60 def to_response [status, headers, [message]] end