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