Module: Ramaze::Helper::Stack
- Defined in:
- lib/ramaze/helper/stack.rb
Overview
Provides an call/answer mechanism, this is useful for example in a login-system.
It is basically good to redirect temporarily 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
Instance Method Summary (collapse)
-
- (Object) answer(alternative = nil)
return to the last location on session[:STACK] 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.
-
- (Object) call(this)
-
- (Boolean) inside_stack?
check if the stack has something inside.
-
- (Object) push(frame)
redirect to another location and pushing the current location on the session[:STACK].
Instance Method Details
- (Object) answer(alternative = nil)
return to the last location on session[:STACK] 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
61 62 63 64 65 66 67 68 69 70 |
# 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 |
- (Object) call(this)
49 50 51 52 |
# File 'lib/ramaze/helper/stack.rb', line 49 def call(this) push(request.fullpath) redirect(this) end |
- (Boolean) inside_stack?
check if the stack has something inside.
73 74 75 |
# File 'lib/ramaze/helper/stack.rb', line 73 def inside_stack? session[:STACK] and session[:STACK].any? end |
- (Object) push(frame)
redirect to another location and pushing the current location on the session[:STACK]
45 46 47 |
# File 'lib/ramaze/helper/stack.rb', line 45 def push(frame) (session[:STACK] ||= []) << frame end |