class Zephyre::Controller
Attributes
request[R]
Public Class Methods
action(action_name)
click to toggle source
# File lib/zephyre/controller.rb, line 56 def self.action(action_name) -> (env) { self.new(env).dispatch(action_name) } end
new(env)
click to toggle source
# File lib/zephyre/controller.rb, line 6 def initialize(env) @request ||= Rack::Request.new(env) end
Public Instance Methods
controller_name()
click to toggle source
# File lib/zephyre/controller.rb, line 41 def controller_name self.class.to_s.gsub(/Controller$/, "").to_snake_case end
dispatch(action)
click to toggle source
# File lib/zephyre/controller.rb, line 45 def dispatch(action) content = self.send(action) if get_response get_response else render(action) get_response end end
get_response()
click to toggle source
# File lib/zephyre/controller.rb, line 18 def get_response @response end
params()
click to toggle source
# File lib/zephyre/controller.rb, line 10 def params request.params end
render(*args)
click to toggle source
# File lib/zephyre/controller.rb, line 22 def render(*args) response(render_template(*args), 200, {"Content-Type" => "text/html"}) end
render_template(view_name, locals = {})
click to toggle source
# File lib/zephyre/controller.rb, line 26 def render_template(view_name, locals = {}) filename = File.join("app", "views", controller_name, "#{view_name}.erb") # If we find a file, render it, otherwise just render whatever was passed as a string template = File.file?(filename) ? File.read(filename) : view_name.to_s vars = {} instance_variables.each do |var| key = var.to_s.gsub("@", "").to_sym vars[key] = instance_variable_get(var) end ERB.new(template).result(binding) end
response(body, status=200, header={})
click to toggle source
# File lib/zephyre/controller.rb, line 14 def response(body, status=200, header={}) @response = Rack::Response.new(body, status, header) end