class Pechkin::App

Rack application to handle requests

Constants

DEFAULT_CONTENT_TYPE
DEFAULT_HEADERS

Attributes

handler[RW]
logger[RW]

Public Class Methods

new(logger) click to toggle source
# File lib/pechkin/app/app.rb, line 9
def initialize(logger)
  @logger = logger
end

Public Instance Methods

call(env) click to toggle source
# File lib/pechkin/app/app.rb, line 13
def call(env)
  req = Rack::Request.new(env)
  result = RequestHandler.new(handler, req, logger).handle
  response(200, result)
rescue AppError => e
  proces_app_error(req, e)
rescue StandardError => e
  process_unhandled_error(req, e)
end

Private Instance Methods

proces_app_error(req, err) click to toggle source
# File lib/pechkin/app/app.rb, line 29
def proces_app_error(req, err)
  data = { status: 'error', message: err.message }
  req.body.rewind
  body = req.body.read
  logger.error "Can't process message: #{err.message}. Body: '#{body}'"
  response(err.code, data)
end
process_unhandled_error(req, err) click to toggle source
# File lib/pechkin/app/app.rb, line 37
def process_unhandled_error(req, err)
  data = { status: 'error', message: err.message }
  logger.error("#{err.message}\n\t" + err.backtrace.join("\n\t"))
  logger.error(req.body.read)
  response(503, data)
end
response(code, body) click to toggle source
# File lib/pechkin/app/app.rb, line 25
def response(code, body)
  [code.to_s, DEFAULT_HEADERS, [body.to_json]]
end