class EasyMvc::Controller

Attributes

request[R]

Public Class Methods

action(action_name) click to toggle source
# File lib/easymvc/controller.rb, line 54
def self.action(action_name)
  -> (env) { self.new(env).dispatch(action_name) }
end
new(env) click to toggle source
# File lib/easymvc/controller.rb, line 7
def initialize(env)
  @request ||= Rack::Request.new(env)
end

Public Instance Methods

controller_name() click to toggle source
# File lib/easymvc/controller.rb, line 40
def controller_name
  self.class.to_s.gsub(/Controller$/, "").downcase
end
dispatch(action) click to toggle source
# File lib/easymvc/controller.rb, line 44
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/easymvc/controller.rb, line 19
def get_response
  @response
end
params() click to toggle source
# File lib/easymvc/controller.rb, line 11
def params
  request.params
end
render(*args) click to toggle source
# File lib/easymvc/controller.rb, line 23
def render(*args)
  response(render_template(*args))
end
render_template(view_name, locals ={}) click to toggle source
# File lib/easymvc/controller.rb, line 27
def render_template(view_name, locals ={})
  filename = File.join("app", "views", controller_name, "#{view_name}.erb")
  template = File.read(filename)

  vars = {}
  instance_variables.each do |var|
    key = var.to_s.gsub("@", "").to_sym
    vars[key] = instance_variable_get(var)
  end

  Erubis::Eruby.new(template).result(locals.merge(vars))
end
response(body, status = 200, header = {}) click to toggle source
# File lib/easymvc/controller.rb, line 15
def response(body, status = 200, header = {})
  @response = Rack::Response.new(body, status, header)
end