class Angus::RequestHandler

Constants

DEFAULT_RENDER

Attributes

middleware[R]

Public Class Methods

new() click to toggle source
# File lib/angus/request_handler.rb, line 18
def initialize
  @router = Angus::Router.new
  @middleware = []

  use Middleware::ExceptionHandler
end

Public Instance Methods

call(env) click to toggle source
# File lib/angus/request_handler.rb, line 29
def call(env)
  to_app.call(env)
end
call!(env) click to toggle source
# File lib/angus/request_handler.rb, line 47
def call!(env)
  begin
    response = router.route(env)
  rescue NotImplementedError
    response = Response.new
    response.status = HTTP_STATUS_CODE_NOT_FOUND

    render(response, { 'status' => 'error',
                       'messages' => [{ 'level' => 'error', 'key' => 'RouteNotFound',
                                        'dsc' => 'Invalid route' }]
    }, {format: :json})
  end

  response.finish
end
disuse(middleware) click to toggle source
# File lib/angus/request_handler.rb, line 98
def disuse(middleware)
  index = @middleware.map(&:first).index(middleware) or raise MiddlewareNotFound.new(middleware)

  @middleware.delete_at(index)
end
render(response, content, options = {}) click to toggle source

TODO add more formats in the future.

# File lib/angus/request_handler.rb, line 64
def render(response, content, options = {})
  format = options[:format] || DEFAULT_RENDER
  case(format)
  when :html
    HtmlRender.render(response, content)
  when :json
    JsonRender.render(response, content)
  else
    raise 'Unknown render format'
  end

  response
end
router() click to toggle source
# File lib/angus/request_handler.rb, line 25
def router
  @router
end
to_app() click to toggle source
# File lib/angus/request_handler.rb, line 33
def to_app
  inner_app = BaseProxy.new(self, lambda { @definitions })

  @app ||= @middleware.reverse.inject(inner_app) do |app, middleware|
    klass, args, block = middleware

    app.class.send(:define_method, :base_middleware) do
      inner_app
    end

    klass.new(app, *args, &block)
  end
end
use(middleware, *args, &block) click to toggle source
# File lib/angus/request_handler.rb, line 78
def use(middleware, *args, &block)
  return if @middleware.map(&:first).include?(middleware)

  @middleware << [middleware, args, block]
end
use_after(klass, middleware, *args, &block) click to toggle source
# File lib/angus/request_handler.rb, line 91
def use_after(klass, middleware, *args, &block)
  return if @middleware.map(&:first).include?(middleware)
  index = @middleware.map(&:first).index(klass) or raise MiddlewareNotFound.new(middleware)

  @middleware.insert(index + 1, [middleware, args, block])
end
use_before(klass, middleware, *args, &block) click to toggle source
# File lib/angus/request_handler.rb, line 84
def use_before(klass, middleware, *args, &block)
  return if @middleware.map(&:first).include?(middleware)
  index = @middleware.map(&:first).index(klass) or raise MiddlewareNotFound.new(middleware)

  @middleware.insert(index, [middleware, args, block])
end