require 'url_rewriting_hack' # The filters added to this controller will be run for all controllers in the application. # Likewise will all the methods added be available for all controllers. class ApplicationController < ActionController::Base # implements Instiki's legacy URLs require 'url_rewriting_hack' after_filter :remember_location # For injecting a different wiki model implementation. Intended for use in tests def self.wiki=(the_wiki) # a global variable is used here because Rails reloads controller and model classes in the # development environment; therefore, storing it as a class variable does not work # class variable is, anyway, not much different from a global variable $instiki_wiki_service = the_wiki logger.debug("Wiki service: #{the_wiki.to_s}") end def self.wiki $instiki_wiki_service end protected def wiki $instiki_wiki_service end @@REMEMBER_NOT = ['locked', 'save'] def remember_location logger.debug @request.method if @response.headers['Status'] == '200 OK' unless @@REMEMBER_NOT.include? action_name or @request.method != :get @session[:return_to] = url_for logger.debug("Session ##{session.object_id}: remembered URL '#{@session[:return_to]}'") end end end def return_to_last_remembered # Forget the redirect location redirect_target, @session[:return_to] = @session[:return_to], nil # then try to redirect to it if redirect_target.nil? logger.debug("Session ##{session.object_id}: no remembered redirect location, trying /") redirect_to_url '/' else logger.debug("Session ##{session.object_id}: " + "redirect to the last remembered URL #{redirect_target}") redirect_to_url(redirect_target) end end end