Sha256: 2038234cd172955c58294f3af4d4079a46ed488f245b700854b04783e3fb5184

Contents?: true

Size: 1.23 KB

Versions: 6

Compression:

Stored size: 1.23 KB

Contents

# frozen_string_literal: true

require "fiber"

module ActiveSupport
  module IsolatedExecutionState # :nodoc:
    @isolation_level = :thread

    Thread.attr_accessor :active_support_execution_state
    Fiber.attr_accessor :active_support_execution_state

    class << self
      attr_reader :isolation_level

      def isolation_level=(level)
        unless %i(thread fiber).include?(level)
          raise ArgumentError, "isolation_level must be `:thread` or `:fiber`, got: `#{level.inspect}`"
        end

        if level != isolation_level
          clear
          singleton_class.alias_method(:current, "current_#{level}")
          singleton_class.send(:private, :current)
          @isolation_level = level
        end
      end

      def unique_id
        self[:__id__] ||= Object.new
      end

      def [](key)
        current[key]
      end

      def []=(key, value)
        current[key] = value
      end

      def clear
        current.clear
      end

      private
        def current_thread
          Thread.current.active_support_execution_state ||= {}
        end

        def current_fiber
          Fiber.current.active_support_execution_state ||= {}
        end

        alias_method :current, :current_thread
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
activesupport-7.0.2 lib/active_support/isolated_execution_state.rb
activesupport-7.0.1 lib/active_support/isolated_execution_state.rb
activesupport-7.0.0 lib/active_support/isolated_execution_state.rb
activesupport-7.0.0.rc3 lib/active_support/isolated_execution_state.rb
activesupport-7.0.0.rc2 lib/active_support/isolated_execution_state.rb
activesupport-7.0.0.rc1 lib/active_support/isolated_execution_state.rb