Sha256: 51a01124611dfb52e8af3d64fed4601aac174813a8a92ca288ac68e920ec2b9a

Contents?: true

Size: 1.59 KB

Versions: 1

Compression:

Stored size: 1.59 KB

Contents

require File.join(File.dirname(__FILE__), "base")
module Mack
  module RunnerHelpers # :nodoc:
    class Session < Mack::RunnerHelpers::Base
      
      attr_accessor :sess_id
      
      def start(request, response, cookies)
        if app_config.mack.use_sessions
          self.sess_id = retrieve_session_id(request, response, cookies)
          unless self.sess_id
            self.sess_id = create_new_session(request, response, cookies)
          else
            sess = Mack::SessionStore.get(self.sess_id, request, response, cookies)
            if sess
              request.session = sess
            else
              # we couldn't find it in the store, so we need to create it:
              self.sess_id = create_new_session(request, response, cookies)
            end
          end
        end
      end
      
      def complete(request, response, cookies)
        unless response.redirection?
          request.session.delete(:tell)
        end
        Mack::SessionStore.set(request.session.id, request, response, cookies) if app_config.mack.use_sessions
      end
      
      private
      def retrieve_session_id(request, response, cookies)
        cookies[app_config.mack.session_id]
      end
      
      def create_new_session(request, response, cookies)
        id = String.randomize(40).downcase
        cookies[app_config.mack.session_id] = {:value => id, :expires => nil}
        sess = Mack::Session.new(id)
        request.session = sess
        Mack::SessionStore.set(request.session.id, request, response, cookies)
        id
      end
      
    end # Session
  end # RunnerHelpers
end # Mack

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
mack-0.7.1 lib/mack/runner_helpers/session.rb