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
-
#answer(alternative = nil) ⇒ Object
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.
- #call(this) ⇒ Object
-
#inside_stack? ⇒ Boolean
check if the stack has something inside.
-
#push(frame) ⇒ Object
redirect to another location and pushing the current location on the session.
Instance Method Details
#answer(alternative = nil) ⇒ Object
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
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 |
#call(this) ⇒ Object
49 50 51 52 |
# File 'lib/ramaze/helper/stack.rb', line 49 def call(this) push(request.fullpath) redirect(this) end |
#inside_stack? ⇒ Boolean
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 |
#push(frame) ⇒ Object
redirect to another location and pushing the current location on the session
45 46 47 |
# File 'lib/ramaze/helper/stack.rb', line 45 def push(frame) (session[:STACK] ||= []) << frame end |