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  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

#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.

Returns:

  • (Boolean)


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