Sha256: e3842c3207b1af3d74b913160172e12b2fba2acc04123badee0cbaddf75c70a3
Contents?: true
Size: 1.93 KB
Versions: 1
Compression:
Stored size: 1.93 KB
Contents
# frozen_string_literal: true require_relative "core_ext/module/delegation" module ActiveSupport # NOTE: This approach has been deprecated for end-user code in favor of {thread_mattr_accessor}[rdoc-ref:Module#thread_mattr_accessor] and friends. # Please use that approach instead. # # 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 <tt>Thread.current</tt>. # The class methods proxy to said thread local instance. # # If the class has an initializer, it must accept no arguments. module PerThreadRegistry def self.extended(object) object.instance_variable_set "@per_thread_registry_key", object.name.freeze end def instance Thread.current[@per_thread_registry_key] ||= new end private def method_missing(name, *args, &block) # Caches the method definition as a singleton method of the receiver. # # By letting #delegate handle it, we avoid an enclosure that'll capture args. singleton_class.delegate name, to: :instance send(name, *args, &block) end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
ruby-on-quails-0.1.0 | activesupport/lib/active_support/per_thread_registry.rb |