From c031a0163356502392f1e6b2839eb248909f9def Mon Sep 17 00:00:00 2001 From: Jamis Buck Date: Wed, 17 Aug 2005 21:05:31 +0000 Subject: Add an :if option to session management, to allow programmatically enabling or disabling the session git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@2031 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- actionpack/lib/action_controller/session_management.rb | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'actionpack/lib/action_controller/session_management.rb') diff --git a/actionpack/lib/action_controller/session_management.rb b/actionpack/lib/action_controller/session_management.rb index 8341575f64..e5c2258582 100644 --- a/actionpack/lib/action_controller/session_management.rb +++ b/actionpack/lib/action_controller/session_management.rb @@ -32,6 +32,11 @@ module ActionController #:nodoc: # # the session will only work over HTTPS, but only for the foo action # session :only => :foo, :session_secure => true # + # # the session will only be disabled for 'foo', and only if it is + # # requested as a web service + # session :off, :only => :foo, + # :if => Proc.new { |req| req.parameters[:ws] } + # # All session options described for ActionController::Base.process_cgi # are valid arguments. def session(*args) @@ -47,11 +52,12 @@ module ActionController #:nodoc: write_inheritable_array("session_options", [options]) end - def session_options_for(action) #:nodoc: + def session_options_for(request, action) #:nodoc: options = {} action = action.to_s (read_inheritable_attribute("session_options") || []).each do |opts| + next if opts[:if] && !opts[:if].call(request) if opts[:only] && opts[:only].include?(action) options.merge!(opts) elsif opts[:except] && !opts[:except].include?(action) @@ -63,6 +69,7 @@ module ActionController #:nodoc: options.delete :only options.delete :except + options.delete :if options[:disabled] ? false : options end @@ -70,7 +77,7 @@ module ActionController #:nodoc: def process_with_session_management_support(request, response, method = :perform_action, *arguments) #:nodoc: action = request.parameters["action"] || "index" - request.session_options = self.class.session_options_for(action) + request.session_options = self.class.session_options_for(request, action) process_without_session_management_support(request, response, method, *arguments) end end -- cgit v1.2.3