Class: Hemp::BaseController

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

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#requestObject (readonly)

Returns the value of attribute request.



9
10
11
# File 'lib/hemp/controller.rb', line 9

def request
  @request
end

#responseObject (readonly)

Returns the value of attribute response.



9
10
11
# File 'lib/hemp/controller.rb', line 9

def response
  @response
end

Instance Method Details

#get_instance_varsObject



26
27
28
29
30
31
# File 'lib/hemp/controller.rb', line 26

def get_instance_vars
  vars = instance_variables
  instance_vars = {}

  OpenStruct.new(pile_up_instance_vars(vars, instance_vars))
end

#get_tilt_template(controller_folder, action) ⇒ Object



18
19
20
21
22
23
24
# File 'lib/hemp/controller.rb', line 18

def get_tilt_template(controller_folder, action)
  template_file = File.join(
    RACK_ROOT, "app", "views", controller_folder, "#{action}.html.erb"
  )

  Tilt.new template_file
end

#paramsObject



50
51
52
# File 'lib/hemp/controller.rb', line 50

def params
  @params ||= OpenStruct.new(request.params)
end

#pile_up_instance_vars(vars, instance_vars) ⇒ Object



33
34
35
36
37
38
39
40
# File 'lib/hemp/controller.rb', line 33

def pile_up_instance_vars(vars, instance_vars)
  vars.each do |var|
    trimmed_var = var[1..-1]
    instance_vars[trimmed_var] = instance_variable_get "@#{trimmed_var}"
  end

  instance_vars
end

#redirect_to(location) ⇒ Object



42
43
44
# File 'lib/hemp/controller.rb', line 42

def redirect_to(location)
  set_response [], 302, "Location" => location
end

#render(action, instance_vars = get_instance_vars) ⇒ Object



11
12
13
14
15
16
# File 'lib/hemp/controller.rb', line 11

def render(action, instance_vars = get_instance_vars)
  controller_folder = self.class.name.pathize.split("_").first
  tilt_template = get_tilt_template(controller_folder, action)
  instance_vars.delete_field :request
  set_response(tilt_template.render(instance_vars))
end

#set_response(body, status = 200, headers = {}) ⇒ Object



46
47
48
# File 'lib/hemp/controller.rb', line 46

def set_response(body, status = 200, headers = {})
  @response = Rack::Response.new(body, status, headers)
end