Class: Angus::RequestHandler
- Inherits:
-
Object
- Object
- Angus::RequestHandler
show all
- Includes:
- Responses
- Defined in:
- lib/angus/request_handler.rb
Direct Known Subclasses
Base
Constant Summary
collapse
- DEFAULT_RENDER =
:json
Constants included
from StatusCodes
StatusCodes::HTTP_STATUS_CODE_CONFLICT, StatusCodes::HTTP_STATUS_CODE_FORBIDDEN, StatusCodes::HTTP_STATUS_CODE_INTERNAL_SERVER_ERROR, StatusCodes::HTTP_STATUS_CODE_NOT_FOUND, StatusCodes::HTTP_STATUS_CODE_OK, StatusCodes::HTTP_STATUS_CODE_UNPROCESSABLE_ENTITY
Instance Attribute Summary collapse
Instance Method Summary
collapse
-
#call(env) ⇒ Object
-
#call!(env) ⇒ Object
-
#disuse(middleware) ⇒ Object
-
#initialize ⇒ RequestHandler
constructor
A new instance of RequestHandler.
-
#render(response, content, options = {}) ⇒ Object
TODO add more formats in the future.
-
#router ⇒ Object
-
#to_app ⇒ Object
-
#use(middleware, *args, &block) ⇒ Object
-
#use_after(klass, middleware, *args, &block) ⇒ Object
-
#use_before(klass, middleware, *args, &block) ⇒ Object
Methods included from Responses
#build_data_response, #build_message, #build_messages, #build_success_response, #get_message_definition, #json
included
Constructor Details
Returns a new instance of RequestHandler.
17
18
19
20
21
22
|
# File 'lib/angus/request_handler.rb', line 17
def initialize
@router = Angus::Router.new
@middleware = []
use Middleware::ExceptionHandler
end
|
Instance Attribute Details
#middleware ⇒ Object
Returns the value of attribute middleware.
15
16
17
|
# File 'lib/angus/request_handler.rb', line 15
def middleware
@middleware
end
|
Instance Method Details
#call(env) ⇒ Object
28
29
30
|
# File 'lib/angus/request_handler.rb', line 28
def call(env)
to_app.call(env)
end
|
#call!(env) ⇒ Object
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
# 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) ⇒ Object
98
99
100
101
102
|
# 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 = {}) ⇒ Object
TODO add more formats in the future.
64
65
66
67
68
69
70
71
72
73
74
75
76
|
# 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 ⇒ Object
24
25
26
|
# File 'lib/angus/request_handler.rb', line 24
def router
@router
end
|
#to_app ⇒ Object
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
# File 'lib/angus/request_handler.rb', line 32
def to_app
inner_app = lambda { |env| self.dup.call!(env) }
@app ||= @middleware.reverse.inject(inner_app) do |app, middleware|
klass, args, block = middleware
if klass == Middleware::ExceptionHandler
klass.new(app, @definitions)
else
klass.new(app, *args, &block)
end
end
end
|
#use(middleware, *args, &block) ⇒ Object
78
79
80
81
82
|
# 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) ⇒ Object
91
92
93
94
95
96
|
# 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) ⇒ Object
84
85
86
87
88
89
|
# 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
|