提交 a74d84bb 编写于 作者: R Rafael Mendonça França

Merge pull request #10142 from wangjohn/grouping_thread_locals

Delegating the value getter and setters in the ScopeRegistry
......@@ -9,11 +9,11 @@ module Scoping
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 @@ def populate_with_current_scope_attributes
#
# 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 @@ def build_default_scope # :nodoc:
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
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册