Skip to content

Commit

Permalink
Creating a module so that per thread registries can be easily created as
Browse files Browse the repository at this point in the history
thread local variables.
  • Loading branch information
wangjohn committed Apr 10, 2013
1 parent 9039c50 commit e94f024
Showing 1 changed file with 41 additions and 0 deletions.
41 changes: 41 additions & 0 deletions activesupport/lib/active_support/per_thread_registry.rb
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

0 comments on commit e94f024

Please sign in to comment.