Sha256: 860432e61387a607e381fffadf87671c13ce76cf2bf2d336b582cdfa7fad4105

Contents?: true

Size: 1.56 KB

Versions: 2

Compression:

Stored size: 1.56 KB

Contents

#          Copyright (c) 2006 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 if inside_stack?
  #       redirect '/'
  #     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 StackHelper
    private

    # redirect to another location and pushing the current location
    # on the session[:STACK]

    def call this
      (session[:STACK] ||= []) << request.fullpath
      redirect this
    end

    # return to the last location on session[:STACK]

    def answer
      if inside_stack?
        stack = session[:STACK]
        target = stack.pop
        session.delete(:STACK) if stack.empty?
        redirect target
      end
    end

    # check if the stack has something inside.

    def inside_stack?
      session[:STACK] and session[:STACK].any?
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
ramaze-0.2.0 lib/ramaze/helper/stack.rb
ramaze-0.2.1 lib/ramaze/helper/stack.rb