mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Creating a module so that per thread registries can be easily created as
thread local variables.
This commit is contained in:
parent
9039c50388
commit
e94f024e14
1 changed files with 41 additions and 0 deletions
41
activesupport/lib/active_support/per_thread_registry.rb
Normal file
41
activesupport/lib/active_support/per_thread_registry.rb
Normal file
|
@ -0,0 +1,41 @@
|
|||
module ActiveSupport
|
||||
# This module creates a local registry class inside each thread. It provides
|
||||
# basic methods which will store thread locals in a single class. This
|
||||
# prevents the proliferation of too many thread locals and allows you to
|
||||
# explicitly keep track of each of the variables you're using as thread
|
||||
# locals in a class which includes this module.
|
||||
#
|
||||
# For example, instead of using a bunch of different thread locals to keep
|
||||
# track of some variables like so:
|
||||
#
|
||||
# Thread.current[:active_record_connection_handler] = connection_handler
|
||||
# Thread.current[:active_record_sql_runtime] = sql_runtime
|
||||
#
|
||||
# You could use the following class which implements the +PerThreadRegistry+
|
||||
# module:
|
||||
#
|
||||
# class NewRegistry
|
||||
# extend ActiveSupport::PerThreadRegistry
|
||||
#
|
||||
# attr_accessor :connection_handler, :sql_runtime
|
||||
# end
|
||||
#
|
||||
# NewRegistry.instance.connection_handler = connection_handler
|
||||
# NewRegistry.instance.sql_runtime = sql_runtime
|
||||
#
|
||||
# The new way of keeping track of the thread locals will create a new local
|
||||
# inside of +Thread.current+ with a key which is the name of the extended
|
||||
# class. Now you can easily access per thread variables by just calling the
|
||||
# variable name on the registry.
|
||||
module PerThreadRegistry
|
||||
def instance
|
||||
Thread.current[self.name] ||= new
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
def method_missing(*args, &block)
|
||||
instance.send(*args, &block)
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Reference in a new issue