Class: TrailsController::Base

Inherits:
Object
  • Object
show all
Defined in:
lib/controller_base.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(req, res, route_params = {}) ⇒ Base

Returns a new instance of Base.



12
13
14
15
16
17
# File 'lib/controller_base.rb', line 12

def initialize(req, res, route_params = {})
  @req = req
  @res = res
  @params = req.params.merge(route_params)
  @already_built_response = false
end

Instance Attribute Details

#paramsObject (readonly)

Returns the value of attribute params.



10
11
12
# File 'lib/controller_base.rb', line 10

def params
  @params
end

#reqObject (readonly)

Returns the value of attribute req.



10
11
12
# File 'lib/controller_base.rb', line 10

def req
  @req
end

#resObject (readonly)

Returns the value of attribute res.



10
11
12
# File 'lib/controller_base.rb', line 10

def res
  @res
end

Instance Method Details

#already_built_response?Boolean

Returns:

  • (Boolean)


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

def already_built_response?
  @already_built_response
end

#flashObject



23
24
25
# File 'lib/controller_base.rb', line 23

def flash
  @flash ||= Flash.new(@req)
end

#invoke_action(name) ⇒ Object



73
74
75
76
# File 'lib/controller_base.rb', line 73

def invoke_action(name)
  send(name)
  render(name) unless already_built_response?
end

#redirect_to(url) ⇒ Object



27
28
29
30
31
32
33
34
35
36
# File 'lib/controller_base.rb', line 27

def redirect_to(url)
  raise 'Response already built' if already_built_response?

  res.status = 302
  res['Location'] = url
  session.store_session(res)
  flash.store_flash(res)

  @already_built_response = true
end

#render(template_name) ⇒ Object



61
62
63
64
65
66
67
# File 'lib/controller_base.rb', line 61

def render(template_name)
  app_template = File.read("app/views/layouts/application.html.erb")
  @__template_name = template_name

  result = ERB.new(app_template).result(binding)
  render_content(result, 'text/html')
end

#render_content(content, content_type) ⇒ Object



38
39
40
41
42
43
44
45
46
47
# File 'lib/controller_base.rb', line 38

def render_content(content, content_type)
  raise 'Cannot render twice' if already_built_response?

  res['Content-Type'] = content_type
  res.write(content)
  session.store_session(res)
  flash.store_flash(res)

  @already_built_response = true
end

#render_partial(params = {}) ⇒ Object



49
50
51
52
53
54
55
56
57
58
59
# File 'lib/controller_base.rb', line 49

def render_partial(params = {})
  defaults = {
    view_dir: self.class.name.underscore[0..-12],
    template: @__template_name
  }
  params = defaults.merge(params)

  file_path = "app/views/#{params[:view_dir]}/#{params[:template]}.html.erb"
  file_contents = File.read(file_path)
  ERB.new(file_contents).result(binding)
end

#sessionObject



69
70
71
# File 'lib/controller_base.rb', line 69

def session
  @session ||= Session.new(@req)
end