Spec-Zone.ru › Ruby on Rails 7.0

модуль ActiveSupport::PerThreadRegistry

ПРИМЕЧАНИЕ: Этот подход устарел для кода конечного пользователя в пользу thread_mattr_accessor и аналогичных. Пожалуйста, используйте этот подход вместо него.

Этот модуль используется для инкапсуляции доступа к переменным потоков.

Вместо того, чтобы загрязнять пространство имён потоковых локальных переменных:

Thread.current[:connection_handler]

вы определяете класс, который расширяет этот модуль:

module ActiveRecord
  class RuntimeRegistry
    extend ActiveSupport::PerThreadRegistry

    attr_accessor :connection_handler
  end
end

и вызываете объявленные методы доступа к экземплярам как методы класса. Таким образом

ActiveRecord::RuntimeRegistry.connection_handler = connection_handler

устанавливает обработчик подключения, локальный для текущего потока, и

ActiveRecord::RuntimeRegistry.connection_handler

возвращает обработчик подключения, локальный для текущего потока.

Эта функция достигается путём создания экземпляра класса и хранения экземпляра как потоковой локальной переменной с ключом, соответствующим имени класса. В примере выше ключ “ActiveRecord::RuntimeRegistry” хранится в Thread.current. Методы класса проксируют к указанному экземпляру потоковой локальной переменной.

Если класс имеет инициализатор, он должен принимать ноль аргументов.

Публичные методы класса

extended(object) Показать исходный код
# File activesupport/lib/active_support/per_thread_registry.rb, line 42
    def self.extended(object)
      ActiveSupport::Deprecation.warn(<<~MSG)
        ActiveSupport::PerThreadRegistry is deprecated and will be removed in Rails 7.1.
        Use `Module#thread_mattr_accessor` instead.
      MSG
      object.instance_variable_set :@per_thread_registry_key, object.name.freeze
    end

Публичные методы экземпляра

instance() Показать исходный код
# File activesupport/lib/active_support/per_thread_registry.rb, line 50
def instance
  Thread.current[@per_thread_registry_key] ||= new
end

© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API