class Wings::Controller
Attributes
env[R]
params[R]
request[R]
response[R]
Public Class Methods
action(act, rp = {})
click to toggle source
Respond to Rack The action will be used like a Rack app
# File lib/wings/controller.rb, line 14 def self.action(act, rp = {}) proc { |e| self.new(e).dispatch(act, rp) } end
new(env)
click to toggle source
# File lib/wings/controller.rb, line 18 def initialize(env) @env = env @request = Rack::Request.new(env) @params = request.params end
Public Instance Methods
dispatch(action, routing_params = {})
click to toggle source
# File lib/wings/controller.rb, line 24 def dispatch(action, routing_params = {}) @params.merge!(routing_params) self.send(action) if response [response.status, response.headers, response.body] else render(action) end end
render(template, **opts)
click to toggle source
- options for render
-
locals: local variables status: status code headers: headers
# File lib/wings/controller.rb, line 40 def render(template, **opts) raise 'You can only render once!' if @response v = View.new(params_for_view(template, opts)) @response = Rack::Response.new(v.text, v.status, v.headers) end
Private Instance Methods
controller_name()
click to toggle source
# File lib/wings/controller.rb, line 61 def controller_name klass = self.class.to_s.gsub(/Controller$/, '') Wings.to_underscore klass end
instance_variable_hash()
click to toggle source
# File lib/wings/controller.rb, line 66 def instance_variable_hash self.instance_variables.reduce({}) do |memo, var| memo[var] = self.instance_variable_get(var) memo end end
params_for_view(template, opts = {})
click to toggle source
# File lib/wings/controller.rb, line 49 def params_for_view(template, opts = {}) { env: env, status: opts[:status], headers: opts[:headers], template: template, local_vars: opts[:locals], controller: controller_name, instance_vars: instance_variable_hash, } end