Class: Hemp::Application

Inherits:
Object show all
Defined in:
lib/hemp/application.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeApplication

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

#paramsObject (readonly)

Returns the value of attribute params.



8
9
10
# File 'lib/hemp/application.rb', line 8

def params
  @params
end

#potObject (readonly)

Returns the value of attribute pot.



8
9
10
# File 'lib/hemp/application.rb', line 8

def pot
  @pot
end

#requestObject (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_responseObject



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