Class: ActiveRecord::Scoping::ScopeRegistry
- Inherits:
-
Object
- Object
- ActiveRecord::Scoping::ScopeRegistry
- Extended by:
- ActiveSupport::PerThreadRegistry
- Defined in:
- lib/active_record/scoping.rb
Overview
This class stores the :current_scope
and :ignore_default_scope
values for different classes. The registry is stored as a thread local, which is accessed through ScopeRegistry.current
.
This class allows you to store and get the scope values on different classes and different types of scopes. For example, if you are attempting to get the current_scope for the Board
model, then you would use the following code:
registry = ActiveRecord::Scoping::ScopeRegistry
registry.set_value_for(:current_scope, Board, some_new_scope)
Now when you run:
registry.value_for(:current_scope, Board)
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)
Constant Summary collapse
- VALID_SCOPE_TYPES =
[:current_scope, :ignore_default_scope]
Instance Method Summary collapse
-
#initialize ⇒ ScopeRegistry
constructor
A new instance of ScopeRegistry.
-
#set_value_for(scope_type, model, value) ⇒ Object
Sets the
value
for a givenscope_type
andmodel
. -
#value_for(scope_type, model, skip_inherited_scope = false) ⇒ Object
Obtains the value for a given
scope_type
andmodel
.
Constructor Details
#initialize ⇒ ScopeRegistry
Returns a new instance of ScopeRegistry.
74 75 76 |
# File 'lib/active_record/scoping.rb', line 74 def initialize @registry = Hash.new { |hash, key| hash[key] = {} } end |
Instance Method Details
#set_value_for(scope_type, model, value) ⇒ Object
Sets the value
for a given scope_type
and model
.
92 93 94 95 |
# File 'lib/active_record/scoping.rb', line 92 def set_value_for(scope_type, model, value) raise_invalid_scope_type!(scope_type) @registry[scope_type][model.name] = value end |
#value_for(scope_type, model, skip_inherited_scope = false) ⇒ Object
Obtains the value for a given scope_type
and model
.
79 80 81 82 83 84 85 86 87 88 89 |
# File 'lib/active_record/scoping.rb', line 79 def value_for(scope_type, model, skip_inherited_scope = false) raise_invalid_scope_type!(scope_type) return @registry[scope_type][model.name] if skip_inherited_scope klass = model base = model.base_class while klass <= base value = @registry[scope_type][klass.name] return value if value klass = klass.superclass end end |