module ActiveSupport::PerThreadRegistry - activesupport-4.2.4 Documentation

# module ActiveSupport::PerThreadRegistry

This module is used to encapsulate access to thread local variables.

Instead of polluting the thread locals namespace:

    Thread.current[:connection_handler]

you define a class that extends this module:

    module ActiveRecord
      class RuntimeRegistry
        extend ActiveSupport::PerThreadRegistry

        attr_accessor :connection_handler
      end
    end

and invoke the declared instance accessors as class methods. So

    ActiveRecord::RuntimeRegistry.connection_handler = connection_handler

sets a connection handler local to the current thread, and

    ActiveRecord::RuntimeRegistry.connection_handler

returns a connection handler local to the current thread.

This feature is accomplished by instantiating the class and storing the instance as a thread local keyed by the class name. In the example above a key “ActiveRecord::RuntimeRegistry” is stored in `Thread.current`. The class methods proxy to said thread local instance.

If the class has an initializer, it must accept no arguments.

### Public Class Methods

extended(object) click to toggle source

    # File lib/active_support/per_thread_registry.rb, line 35
    def self.extended(object)
      object.instance_variable_set '@per_thread_registry_key', object.name.freeze
    end

### Public Instance Methods

instance() click to toggle source

    # File lib/active_support/per_thread_registry.rb, line 39
    def instance
      Thread.current[@per_thread_registry_key] ||= new
    end