module LazyController::Routable

included in Dancefloor

Public Class Methods

included(base) click to toggle source
# File lib/lazy_controller.rb, line 48
def self.included(base)
  base.__send__ :use, Rack::Flash
  base.__send__ :helpers, Sinatra::Partials
end

Public Instance Methods

controller(c_name, c_action, params={}) click to toggle source
# File lib/lazy_controller.rb, line 57
def controller(c_name, c_action, params={})
  require File.join(CONTROLLERSDIR, "#{c_name}_controller")
  require File.join(MODELSDIR, c_name[0...-1])
  begin
    controller = self.class.const_get("#{c_name.capitalize}Controller")
    controller_inst = controller.new
    result = if params.blank?
      controller_inst.__send__(c_action)
    else
      controller_inst.__send__(c_action, params)
    end
    controller_inst.instance_variables.each do |ivar|
      # establish non block-local scope
      ivar_value = nil
      controller_inst.instance_eval do
        ivar_value = instance_variable_get ivar
      end
      # self here is the instance of the application
      instance_variable_set ivar, ivar_value
    end
  ensure
    Db.conn.disconnect if Db.conn.kind_of? DBI::DatabaseHandle and
    Db.conn.connected?
  end
  result
end