/usr/lib/ruby/1.8/ramaze/helper/stack.rb is in libramaze-ruby1.8 2010.06.18-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | # Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
# All files in this distribution are subject to the terms of the Ruby license.
module Ramaze
module Helper
# 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
module Stack
# redirect to another location and pushing the current location
# on the session[:STACK]
def push(frame)
(session[:STACK] ||= []) << frame
end
def call(this)
push(request.fullpath)
redirect(this)
end
# 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
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
# check if the stack has something inside.
def inside_stack?
session[:STACK] and session[:STACK].any?
end
end
end
end
|