module Ramaze::Helper::Stack

Provides an call/answer mechanism, this is useful for example in a login-system.

It is basically good to redirect temporarly somewhere else without forgetting where you come from and offering a nice way to get back to the last urls.

Example:

class AuthController < Controller

helper :stack

def login pass
  if pass == 'password'
    session[:logged_in] = true
    answer '/'
  else
    "failed"
  end
end

def logged_in?
  !!session[:logged_in]
end

end

class ImportantController < Controller

helper :stack

def secret_information
  call :login unless logged_in?
  "Agent X is assigned to fight the RubyNinjas"
end

end

Public Instance Methods

answer(alternative = nil) click to toggle source

return to the last location on session The optional alternative paramter will be used to redirect in case you are not inside_stack? If the session has no stack and no alternative is given this won't do anything

# File lib/ramaze/helper/stack.rb, line 61
def answer(alternative = nil)
  if inside_stack?
    stack = session[:STACK]
    target = stack.pop
    session.delete(:STACK) if stack.empty?
    redirect(target)
  elsif alternative
    redirect(alternative)
  end
end
call(this) click to toggle source
# File lib/ramaze/helper/stack.rb, line 49
def call(this)
  push(request.fullpath)
  redirect(this)
end
inside_stack?() click to toggle source

check if the stack has something inside.

# File lib/ramaze/helper/stack.rb, line 73
def inside_stack?
  session[:STACK] and session[:STACK].any?
end
push(frame) click to toggle source

redirect to another location and pushing the current location on the session

# File lib/ramaze/helper/stack.rb, line 45
def push(frame)
  (session[:STACK] ||= []) << frame
end