aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/runtime_registry.rb
blob: 3f0ac68143b6c43114438b6743aa03424ca30d09 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
require 'active_support/per_thread_registry'

module ActiveRecord
  # This is a registry class for storing local variables in active record. The
  # class allows you to access variables that are local to the current thread.
  # These thread local variables are stored as attributes in the
  # +RuntimeRegistry+ class.
  #
  # You can access the thread local variables by calling a variable's name on
  # the +RuntimeRegistry+ class. For example, if you wanted to obtain the
  # connection handler for the current thread, you would invoke:
  #
  #   ActiveRecord::RuntimeRegistry.instance.connection_handler
  #
  # The +PerThreadRegistry+ module will make a new +RuntimeRegistry+ instance
  # and store it in +Thread.current+. Whenever you make a call for an attribute
  # on the +RuntimeRegistry+ class, the call will be sent to the instance that
  # is stored in +Thread.current+.
  #
  # Note that you can also make the following call which would provide an
  # equivalent result as the previous code:
  #
  #   ActiveRecord::RuntimeRegistry.connection_handler
  #
  # However, this is less performant because it makes a call to +method_missing+
  # before it sends the method call to the +instance+.
  class RuntimeRegistry
    extend ActiveSupport::PerThreadRegistry

    attr_accessor :connection_handler, :sql_runtime, :connection_id
  end
end