class Thrifty::HTTP::Server::ErrMiddleware

Public Class Methods

new(app, name) click to toggle source
# File lib/thrifty/http_server/err_middleware.rb, line 4
def initialize(app, name)
  @log = Thrifty.get_logger(name)
  @app = app
end

Public Instance Methods

call(env) click to toggle source
# File lib/thrifty/http_server/err_middleware.rb, line 9
def call(env)
  @app.call(env)
rescue Exception => e
  @log.error(e, clean_env(env))
  body = dump_exception(e)
  [
    500,
    {
      Rack::CONTENT_TYPE   => 'text/plain',
      Rack::CONTENT_LENGTH => Rack::Utils.bytesize(body).to_s,
    },
    [body],
  ]
end

Private Instance Methods

clean_env(env) click to toggle source
# File lib/thrifty/http_server/err_middleware.rb, line 26
def clean_env(env)
  env.inject({}) do |ac, pair|
    case
    when pair[0] =~ /\A(rack|puma)\./
      ac
    else
      ac.merge! pair[0] => pair[1]
    end
  end
end
dump_exception(exception) click to toggle source
# File lib/thrifty/http_server/err_middleware.rb, line 37
def dump_exception(exception)
  string = "#{exception.class}: #{exception.message}\n"
  string << exception.backtrace.map { |l| "\t#{l}" }.join("\n")
  string
end