Class: Reins::Controller

Inherits:
Object show all
Includes:
Model
Defined in:
lib/reins/controller.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(env) ⇒ Controller

Returns a new instance of Controller.



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

def initialize(env)
  @env = env
  @routing_params = {}
end

Class Method Details

.action(act, rp = {}) ⇒ Object



26
27
28
# File 'lib/reins/controller.rb', line 26

def self.action(act, rp = {})
  proc { |e| self.new(e).dispatch(act, rp) }
end

Instance Method Details

#controller_nameObject



52
53
54
55
56
# File 'lib/reins/controller.rb', line 52

def controller_name
  klass = self.class
  klass = klass.to_s.gsub(/Controller$/, "")
  Reins.to_underscore klass
end

#dispatch(action, routing_params = {}) ⇒ Object



14
15
16
17
18
19
20
21
22
23
24
# File 'lib/reins/controller.rb', line 14

def dispatch(action, routing_params = {})
  @routing_params = routing_params
  text = self.send(action)
  r = get_response
  if r
    [r.status, r.headers, [r.body].flatten]
  else
    [200, {'content-type' => 'text/html'},
      [text].flatten]
  end
end

#envObject



30
31
32
# File 'lib/reins/controller.rb', line 30

def env
  @env
end

#get_responseObject



48
49
50
# File 'lib/reins/controller.rb', line 48

def get_response
  @response
end

#instance_hashObject



58
59
60
61
62
63
64
# File 'lib/reins/controller.rb', line 58

def instance_hash
  h = {}
  instance_variables.each do |i|
    h[i] = instance_variable_get i
  end
  h
end

#paramsObject



38
39
40
# File 'lib/reins/controller.rb', line 38

def params
  request.params.merge @routing_params
end

#render(view_name, locals = {}) ⇒ Object



66
67
68
69
70
71
72
73
74
75
76
77
78
79
# File 'lib/reins/controller.rb', line 66

def render(view_name, locals = {})
  filename = File.join "app", "views",
    controller_name, "#{view_name}.html.erb"
  template = File.read filename
  v = View.new
  v.set_vars instance_hash
  v.evaluate template
  # instance_vars = instance_variables.each_with_object({}) do |var, hash|
  #   hash[var.to_s.delete("@").to_sym] = instance_variable_get(var)
  # end
  # eruby = Erubis::Eruby.new(template)
  # result = eruby.result locals.merge(instance_vars) # locals.merge(:env => env)
  # response(result)
end

#requestObject



34
35
36
# File 'lib/reins/controller.rb', line 34

def request
  @request ||= Rack::Request.new(@env)
end

#response(text, status = 200, headers = {}) ⇒ Object



42
43
44
45
46
# File 'lib/reins/controller.rb', line 42

def response(text, status = 200, headers = {})
  raise "Already responded!" if @response
  a = [text].flatten
  @response = Rack::Response.new(a, status, headers)
end