###########
## File: app/controllers/application_controller.rb
class ApplicationController < ActionController::Base

  around_filter :catch_prerequisite

  private
    def catch_prerequisite
      need = catch :prerequisite_unmet do
        yield
        return nil
      end
      return redirect_to :action => need if need
    end

    def prerequisite(need)
      if send(need.to_s + '?')
        return true
      else
        throw :prerequisite_unmet, need
      end
    end
end

###########
## File: app/controllers/other_controller.rb
class OtherController < ApplicationController
  def login
    if params[:username]
      session[:user] = User.find_by_username(params[:username])
      redirect_to :action => :settings
    else
      render :login
    end
  end

  def settings
    prerequisite :login
    render :settings
  end

  private
    def login?
      return true if session[:user]
    end
end