Class: ActiveFedora::Scoping::ScopeRegistry
- Inherits:
-
Object
- Object
- ActiveFedora::Scoping::ScopeRegistry
- Defined in:
- lib/active_fedora/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 = ActiveFedora::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:
ActiveFedora::Scoping::ScopeRegistry.set_value_for(:current_scope,
Board, some_new_scope)
Constant Summary collapse
- VALID_SCOPE_TYPES =
:nodoc:
[:current_scope, :ignore_default_scope].freeze
Class Method Summary collapse
- .raise_invalid_scope_type!(scope_type) ⇒ Object private
- .registry ⇒ Object
-
.set_value_for(scope_type, model, value) ⇒ Object
Sets the
value
for a givenscope_type
andmodel
. -
.value_for(scope_type, model) ⇒ Object
Obtains the value for a given
scope_type
andmodel
.
Class Method Details
.raise_invalid_scope_type!(scope_type) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
95 96 97 |
# File 'lib/active_fedora/scoping.rb', line 95 def self.raise_invalid_scope_type!(scope_type) raise ArgumentError, "Invalid scope type '#{scope_type}' sent to the registry. Scope types must be included in VALID_SCOPE_TYPES" unless VALID_SCOPE_TYPES.include?(scope_type) end |
.registry ⇒ Object
72 73 74 |
# File 'lib/active_fedora/scoping.rb', line 72 def self.registry self._registry ||= Hash.new { |hash, key| hash[key] = {} } end |
.set_value_for(scope_type, model, value) ⇒ Object
Sets the value
for a given scope_type
and model
.
89 90 91 92 |
# File 'lib/active_fedora/scoping.rb', line 89 def self.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) ⇒ Object
Obtains the value for a given scope_type
and model
.
77 78 79 80 81 82 83 84 85 86 |
# File 'lib/active_fedora/scoping.rb', line 77 def self.value_for(scope_type, model) raise_invalid_scope_type!(scope_type) klass = model base = model.base_class while klass <= base value = registry[scope_type][klass.name] return value if value klass = klass.superclass end end |