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)

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.

Returns:

  • (Boolean)


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