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