Sha256: 01e5d78d91c0cd699f80417cd8781417521d0782202eeb5f37bd66196550c726

Contents?: true

Size: 1.51 KB

Versions: 19

Compression:

Stored size: 1.51 KB

Contents

# coding: utf-8
require 'rack/session/abstract/id'

module UzuUzu
  module RackSession
    class Memcache < ::Rack::Session::Abstract::ID
      #
      attr_reader :adapter
      
      #
      #
      #
      def initialize(env=nil)
        @adapter = :memcache
        super(nil, env)
        @mutex = Mutex.new
        @pool = ::UzuUzu::Wrapper::Wrapper.new('memcache', env['config']).wrapper
      end
      
      def app(app)
        @app = app
      end
      
      def generate_sid
        loop do
          sid = super
          break sid unless @pool.get(sid)
        end
      end

      def get_session(env, sid)
        with_lock(env, [nil, {}]) do
          unless sid and session = @pool.get(sid)
            sid, session = generate_sid, {}
            unless /^STORED/ =~ @pool.add(sid, session)
              raise "Session collision on '#{sid.inspect}'"
            end
          end
          [sid, session]
        end
      end

      def set_session(env, session_id, new_session, options)
        with_lock(env, false) do
          @pool.set session_id, new_session
          session_id
        end
      end

      def destroy_session(env, session_id, options)
        with_lock(env) do
          @pool.delete(session_id)
          generate_sid unless options[:drop]
        end
      end

      def with_lock(env, default=nil)
        @mutex.lock if env['rack.multithread']
        yield
      rescue
        default
      ensure
        @mutex.unlock if @mutex.locked?
      end
    end # Leveldb
  end # Kvs
end # UzuUzu

Version data entries

19 entries across 19 versions & 1 rubygems

Version Path
uzuuzu-core-0.1.15 lib/uzuuzu-core/rack_session/memcache.rb
uzuuzu-core-0.1.14 lib/uzuuzu-core/rack_session/memcache.rb
uzuuzu-core-0.1.13 lib/uzuuzu-core/rack_session/memcache.rb
uzuuzu-core-0.1.11 lib/uzuuzu-core/rack_session/memcache.rb
uzuuzu-core-0.1.10 lib/uzuuzu-core/rack_session/memcache.rb
uzuuzu-core-0.1.8 lib/uzuuzu-core/rack_session/memcache.rb
uzuuzu-core-0.1.7 lib/uzuuzu-core/rack_session/memcache.rb
uzuuzu-core-0.1.6 lib/uzuuzu-core/rack_session/memcache.rb
uzuuzu-core-0.1.5 lib/uzuuzu-core/rack_session/memcache.rb
uzuuzu-core-0.1.4 lib/uzuuzu-core/rack_session/memcache.rb
uzuuzu-core-0.1.3 lib/uzuuzu-core/rack_session/memcache.rb
uzuuzu-core-0.1.2.001 lib/uzuuzu-core/rack_session/memcache.rb
uzuuzu-core-0.1.2 lib/uzuuzu-core/rack_session/memcache.rb
uzuuzu-core-0.1.1 lib/uzuuzu-core/rack_session/memcache.rb
uzuuzu-core-0.1.0 lib/uzuuzu-core/rack_session/memcache.rb
uzuuzu-core-0.0.15 lib/uzuuzu/rack_session/memcache.rb
uzuuzu-core-0.0.14 lib/uzuuzu/rack_session/memcache.rb
uzuuzu-core-0.0.13 lib/uzuuzu/rack_session/memcache.rb
uzuuzu-core-0.0.12 lib/uzuuzu/rack_session/memcache.rb