-
Notifications
You must be signed in to change notification settings - Fork 21.6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Creating a module so that per thread registries can be easily created as
thread local variables.
- Loading branch information
Showing
1 changed file
with
41 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Original file line | Diff line number | Diff line change |
---|---|---|---|
@@ -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 |