Sha256: d10d44134b1fbf68658b7a35e5ed640002d9d5b70c0e32f8178b6a7475b20c44

Contents?: true

Size: 1.24 KB

Versions: 37

Compression:

Stored size: 1.24 KB

Contents

# frozen_string_literal: true
# encoding: utf-8

require 'singleton'

module Mrss

  def self.patch_mongo_for_session_registry

    Mongo::Client.class_eval do
      alias :get_session_without_tracking :get_session

      def get_session(options = {})
        get_session_without_tracking(options).tap do |session|
          SessionRegistry.instance.register(session)
        end
      end
    end

    Mongo::Session.class_eval do
      alias :end_session_without_tracking :end_session

      def end_session
        SessionRegistry.instance.unregister(self)
        end_session_without_tracking
      end
    end
  end
end

module Mrss
  class SessionRegistry
    include Singleton

    def initialize
      @registry = {}
    end

    def register(session)
      @registry[session.session_id] = session if session
    end

    def unregister(session)
      @registry.delete(session.session_id) unless session.ended?
    end

    def verify_sessions_ended!
      @registry.delete_if { |_, session| session.ended? }

      unless @registry.empty?
        sessions = @registry.map { |_, session| session }
        raise "Session registry contains live sessions: #{sessions.join(', ')}"
      end
    end

    def clear_registry
      @registry = {}
    end
  end
end

Version data entries

37 entries across 37 versions & 4 rubygems

Version Path
mogno-1.0.0 spec/shared/lib/mrss/session_registry_legacy.rb
mongoid-9.0.0 spec/shared/lib/mrss/session_registry_legacy.rb
mongo-2.20.0 spec/shared/lib/mrss/session_registry_legacy.rb
mongoid-8.0.8 spec/shared/lib/mrss/session_registry_legacy.rb
mongoid-8.1.5 spec/shared/lib/mrss/session_registry_legacy.rb
bson-5.0.0-java spec/shared/lib/mrss/session_registry_legacy.rb
bson-5.0.0 spec/shared/lib/mrss/session_registry_legacy.rb
mongoid-8.1.4 spec/shared/lib/mrss/session_registry_legacy.rb
mongo-2.19.3 spec/shared/lib/mrss/session_registry_legacy.rb
mongo-2.18.3 spec/shared/lib/mrss/session_registry_legacy.rb
mongo-2.19.2 spec/shared/lib/mrss/session_registry_legacy.rb
mongoid-8.0.7 spec/shared/lib/mrss/session_registry_legacy.rb
mongoid-8.1.3 spec/shared/lib/mrss/session_registry_legacy.rb
mongoid-8.1.2 spec/shared/lib/mrss/session_registry_legacy.rb
mongoid-8.0.6 spec/shared/lib/mrss/session_registry_legacy.rb
mongoid-7.5.4 spec/shared/lib/mrss/session_registry_legacy.rb
mongo-2.19.1 spec/shared/lib/mrss/session_registry_legacy.rb
mongoid-8.1.1 spec/shared/lib/mrss/session_registry_legacy.rb
mongoid-8.0.5 spec/shared/lib/mrss/session_registry_legacy.rb
mongoid-8.1.0 spec/shared/lib/mrss/session_registry_legacy.rb