Sha256: 38e4009a0be0eb5da82ddddadc9b6b90e69689a667568b17b34e65a7b3f1884d

Contents?: true

Size: 1.82 KB

Versions: 17

Compression:

Stored size: 1.82 KB

Contents

#          Copyright (c) 2008 Michael Fellinger m.fellinger@gmail.com
# All files in this distribution are subject to the terms of the Ruby license.

module Ramaze

  # 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 Helper::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

Version data entries

17 entries across 17 versions & 4 rubygems

Version Path
Pistos-ramaze-2008.09 lib/ramaze/helper/stack.rb
Pistos-ramaze-2008.12 lib/ramaze/helper/stack.rb
Pistos-ramaze-2009.01 lib/ramaze/helper/stack.rb
Pistos-ramaze-2009.02 lib/ramaze/helper/stack.rb
manveru-ramaze-2008.07 lib/ramaze/helper/stack.rb
manveru-ramaze-2008.08 lib/ramaze/helper/stack.rb
manveru-ramaze-2008.09 lib/ramaze/helper/stack.rb
manveru-ramaze-2008.10 lib/ramaze/helper/stack.rb
manveru-ramaze-2008.12 lib/ramaze/helper/stack.rb
manveru-ramaze-2009.01 lib/ramaze/helper/stack.rb
ptomato-ramaze-2009.02.1 lib/ramaze/helper/stack.rb
ptomato-ramaze-2009.02 lib/ramaze/helper/stack.rb
ramaze-2008.06 lib/ramaze/helper/stack.rb
ramaze-2009.01 lib/ramaze/helper/stack.rb
ramaze-2008.11 lib/ramaze/helper/stack.rb
ramaze-2009.03 lib/ramaze/helper/stack.rb
ramaze-2009.02 lib/ramaze/helper/stack.rb