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