Class: Reins::Controller
- Includes:
- Model
- Defined in:
- lib/reins/controller.rb
Class Method Summary collapse
Instance Method Summary collapse
- #controller_name ⇒ Object
- #dispatch(action, routing_params = {}) ⇒ Object
- #env ⇒ Object
- #get_response ⇒ Object
-
#initialize(env) ⇒ Controller
constructor
A new instance of Controller.
- #instance_hash ⇒ Object
- #params ⇒ Object
- #render(view_name, locals = {}) ⇒ Object
- #request ⇒ Object
- #response(text, status = 200, headers = {}) ⇒ Object
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_name ⇒ Object
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 |
#env ⇒ Object
30 31 32 |
# File 'lib/reins/controller.rb', line 30 def env @env end |
#get_response ⇒ Object
48 49 50 |
# File 'lib/reins/controller.rb', line 48 def get_response @response end |
#instance_hash ⇒ Object
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 |
#params ⇒ Object
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 |
#request ⇒ Object
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 |