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, variable_name, value) ⇒ Object
Sets the
value
for a givenscope_type
andvariable_name
. -
#value_for(scope_type, variable_name) ⇒ Object
Obtains the value for a given
scope_name
andvariable_name
.
Constructor Details
#initialize ⇒ ScopeRegistry
Returns a new instance of ScopeRegistry.
62 63 64 |
# File 'lib/active_record/scoping.rb', line 62 def initialize @registry = Hash.new { |hash, key| hash[key] = {} } end |
Instance Method Details
#set_value_for(scope_type, variable_name, value) ⇒ Object
Sets the value
for a given scope_type
and variable_name
.
73 74 75 76 |
# File 'lib/active_record/scoping.rb', line 73 def set_value_for(scope_type, variable_name, value) raise_invalid_scope_type!(scope_type) @registry[scope_type][variable_name] = value end |
#value_for(scope_type, variable_name) ⇒ Object
Obtains the value for a given scope_name
and variable_name
.
67 68 69 70 |
# File 'lib/active_record/scoping.rb', line 67 def value_for(scope_type, variable_name) raise_invalid_scope_type!(scope_type) @registry[scope_type][variable_name] end |