Class: Hemp::Application
Instance Attribute Summary collapse
-
#params ⇒ Object
readonly
Returns the value of attribute params.
-
#pot ⇒ Object
readonly
Returns the value of attribute pot.
-
#request ⇒ Object
readonly
Returns the value of attribute request.
Instance Method Summary collapse
- #call(env) ⇒ Object
- #find_route(request) ⇒ Object
- #get_params(route) ⇒ Object
-
#initialize ⇒ Application
constructor
A new instance of Application.
- #obtain_appropriate_response(controller_class, route) ⇒ Object
- #process_request(route) ⇒ Object
- #send_default_response ⇒ Object
- #set_request_and_params_as_instance(route, controller_class) ⇒ Object
Constructor Details
#initialize ⇒ Application
Returns a new instance of Application.
10 11 12 |
# File 'lib/hemp/application.rb', line 10 def initialize @pot = Hemp::Routing::Base.new end |
Instance Attribute Details
#params ⇒ Object (readonly)
Returns the value of attribute params.
8 9 10 |
# File 'lib/hemp/application.rb', line 8 def params @params end |
#pot ⇒ Object (readonly)
Returns the value of attribute pot.
8 9 10 |
# File 'lib/hemp/application.rb', line 8 def pot @pot end |
#request ⇒ Object (readonly)
Returns the value of attribute request.
8 9 10 |
# File 'lib/hemp/application.rb', line 8 def request @request end |
Instance Method Details
#call(env) ⇒ Object
14 15 16 17 18 |
# File 'lib/hemp/application.rb', line 14 def call(env) @request = Rack::Request.new(env) route = find_route(request) unless env.empty? route ? process_request(route) : send_default_response end |
#find_route(request) ⇒ Object
20 21 22 23 24 25 26 27 |
# File 'lib/hemp/application.rb', line 20 def find_route(request) verb = request.request_method.downcase.to_sym route = @pot.routes[verb].detect do|route_val| route_val == request.path_info end route end |
#get_params(route) ⇒ Object
36 37 38 39 40 |
# File 'lib/hemp/application.rb', line 36 def get_params(route) request.params.merge(route.get_url_vars(request.path_info)) rescue RuntimeError {}.merge(route.get_url_vars(request.path_info)) end |
#obtain_appropriate_response(controller_class, route) ⇒ Object
48 49 50 51 52 53 |
# File 'lib/hemp/application.rb', line 48 def obtain_appropriate_response(controller_class, route) controller_class.send(route.action_sym) response = controller_class.response response ? response : controller_class.render(route.action_sym) end |
#process_request(route) ⇒ Object
29 30 31 32 33 34 |
# File 'lib/hemp/application.rb', line 29 def process_request(route) controller_class = Object. const_get(route.controller_camel).new set_request_and_params_as_instance route, controller_class obtain_appropriate_response(controller_class, route) end |
#send_default_response ⇒ Object
55 56 57 |
# File 'lib/hemp/application.rb', line 55 def send_default_response Rack::Response.new "Hello from Hemp", 200, {} end |
#set_request_and_params_as_instance(route, controller_class) ⇒ Object
42 43 44 45 46 |
# File 'lib/hemp/application.rb', line 42 def set_request_and_params_as_instance(route, controller_class) params = get_params(route) request.instance_variable_set "@params", params controller_class.instance_variable_set "@request", request end |