Class: Angus::RequestHandler

Inherits:
Object
  • Object
show all
Includes:
Responses
Defined in:
lib/angus/request_handler.rb

Direct Known Subclasses

Base

Constant Summary collapse

DEFAULT_RENDER =
:json

Constants included from Responses

Angus::Responses::HTTP_STATUS_CODE_CONFLICT, Angus::Responses::HTTP_STATUS_CODE_FORBIDDEN, Angus::Responses::HTTP_STATUS_CODE_INTERNAL_SERVER_ERROR, Angus::Responses::HTTP_STATUS_CODE_NOT_FOUND, Angus::Responses::HTTP_STATUS_CODE_OK, Angus::Responses::HTTP_STATUS_CODE_UNPROCESSABLE_ENTITY

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Responses

#build_data_response, #build_error_response, #build_message, #build_messages, #build_no_data_response, #build_success_response, #build_warning_response, #get_error_definition, #get_error_status_code, #get_message_definition, #json

Constructor Details

#initializeRequestHandler

Returns a new instance of RequestHandler.



15
16
17
# File 'lib/angus/request_handler.rb', line 15

def initialize
  @router = Angus::Router.new
end

Instance Attribute Details

#envObject (readonly)

Returns the value of attribute env.



13
14
15
# File 'lib/angus/request_handler.rb', line 13

def env
  @env
end

#paramsObject (readonly)

Returns the value of attribute params.



13
14
15
# File 'lib/angus/request_handler.rb', line 13

def params
  @params
end

#requestObject (readonly)

Returns the value of attribute request.



13
14
15
# File 'lib/angus/request_handler.rb', line 13

def request
  @request
end

#responseObject (readonly)

Returns the value of attribute response.



13
14
15
# File 'lib/angus/request_handler.rb', line 13

def response
  @response
end

Instance Method Details

#call(env) ⇒ Object



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/angus/request_handler.rb', line 23

def call(env)
  begin
    @env      = env
    @response = Response.new

    router.route(env)
  rescue Angus::Router::NotImplementedError
    @response.status = HTTP_STATUS_CODE_NOT_FOUND

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

  @response.finish
end

#render(content, options = {}) ⇒ Object

TODO ver multiples formatos en el futuro



42
43
44
45
46
47
48
49
50
51
52
# File 'lib/angus/request_handler.rb', line 42

def render(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
end

#routerObject



19
20
21
# File 'lib/angus/request_handler.rb', line 19

def router
  @router
end

#use(middleware, *args, &block) ⇒ Object

TODO ver esto en el futuro Use the specified Rack middleware



56
57
58
59
# File 'lib/angus/request_handler.rb', line 56

def use(middleware, *args, &block)
  @prototype = nil
  @middleware << [middleware, args, block]
end