1
0
Fork 0
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:
Rafael Mendonça França 2013-04-09 07:19:29 -07:00
commit a74d84bb29
2 changed files with 16 additions and 9 deletions

View file

@ -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

View file

@ -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