mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Merge pull request #10142 from wangjohn/grouping_thread_locals
Delegating the value getter and setters in the ScopeRegistry
This commit is contained in:
commit
a74d84bb29
2 changed files with 16 additions and 9 deletions
|
@ -9,11 +9,11 @@ module ActiveRecord
|
|||
|
||||
module ClassMethods
|
||||
def current_scope #:nodoc:
|
||||
ScopeRegistry.current.value_for(:current_scope, base_class.to_s)
|
||||
ScopeRegistry.value_for(:current_scope, base_class.to_s)
|
||||
end
|
||||
|
||||
def current_scope=(scope) #:nodoc:
|
||||
ScopeRegistry.current.set_value_for(:current_scope, base_class.to_s, scope)
|
||||
ScopeRegistry.set_value_for(:current_scope, base_class.to_s, scope)
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -41,16 +41,23 @@ module ActiveRecord
|
|||
#
|
||||
# registry.value_for(:current_scope, "Board")
|
||||
#
|
||||
# You will obtain whatever was defined in +some_new_scope+.
|
||||
# You will obtain whatever was defined in +some_new_scope+. The +value_for+
|
||||
# and +set_value_for+ methods are delegated to the current +ScopeRegistry+
|
||||
# object, so the above example code can also be called as:
|
||||
#
|
||||
# ActiveRecord::Scoping::ScopeRegistry.set_value_for(:current_scope,
|
||||
# "Board", some_new_scope)
|
||||
class ScopeRegistry # :nodoc:
|
||||
def self.current
|
||||
Thread.current["scope_registry"] ||= new
|
||||
class << self
|
||||
delegate :value_for, :set_value_for, to: :current
|
||||
|
||||
def current
|
||||
Thread.current["scope_registry"] ||= new
|
||||
end
|
||||
end
|
||||
|
||||
VALID_SCOPE_TYPES = [:current_scope, :ignore_default_scope]
|
||||
|
||||
attr_accessor :registry
|
||||
|
||||
def initialize
|
||||
@registry = Hash.new { |hash, key| hash[key] = {} }
|
||||
end
|
||||
|
|
|
@ -120,11 +120,11 @@ module ActiveRecord
|
|||
end
|
||||
|
||||
def ignore_default_scope? # :nodoc:
|
||||
ScopeRegistry.current.value_for(:ignore_default_scope, self)
|
||||
ScopeRegistry.value_for(:ignore_default_scope, self)
|
||||
end
|
||||
|
||||
def ignore_default_scope=(ignore) # :nodoc:
|
||||
ScopeRegistry.current.set_value_for(:ignore_default_scope, self, ignore)
|
||||
ScopeRegistry.set_value_for(:ignore_default_scope, self, ignore)
|
||||
end
|
||||
|
||||
# The ignore_default_scope flag is used to prevent an infinite recursion
|
||||
|
|
Loading…
Reference in a new issue