Class: ActiveRecord::Scoping::ScopeRegistry

Inherits:
Object
  • Object
show all
Defined in:
activerecord/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 either a thread or fiber local depending on the application configuration.

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_current_scope(Board, some_new_scope)

Now when you run:

registry.current_scope(Board)

You will obtain whatever was defined in some_new_scope.

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeScopeRegistry

Returns a new instance of ScopeRegistry.


86
87
88
89
90
# File 'activerecord/lib/active_record/scoping.rb', line 86

def initialize
  @current_scope        = {}
  @ignore_default_scope = {}
  @global_current_scope = {}
end

Class Method Details

.instanceObject


81
82
83
# File 'activerecord/lib/active_record/scoping.rb', line 81

def instance
  ActiveSupport::IsolatedExecutionState[:active_record_scope_registry] ||= new
end

Instance Method Details

#current_scope(model, skip_inherited_scope = false) ⇒ Object


92
93
94
# File 'activerecord/lib/active_record/scoping.rb', line 92

def current_scope(model, skip_inherited_scope = false)
  value_for(@current_scope, model, skip_inherited_scope)
end

#global_current_scope(model, skip_inherited_scope = false) ⇒ Object


108
109
110
# File 'activerecord/lib/active_record/scoping.rb', line 108

def global_current_scope(model, skip_inherited_scope = false)
  value_for(@global_current_scope, model, skip_inherited_scope)
end

#ignore_default_scope(model, skip_inherited_scope = false) ⇒ Object


100
101
102
# File 'activerecord/lib/active_record/scoping.rb', line 100

def ignore_default_scope(model, skip_inherited_scope = false)
  value_for(@ignore_default_scope, model, skip_inherited_scope)
end

#set_current_scope(model, value) ⇒ Object


96
97
98
# File 'activerecord/lib/active_record/scoping.rb', line 96

def set_current_scope(model, value)
  set_value_for(@current_scope, model, value)
end

#set_global_current_scope(model, value) ⇒ Object


112
113
114
# File 'activerecord/lib/active_record/scoping.rb', line 112

def set_global_current_scope(model, value)
  set_value_for(@global_current_scope, model, value)
end

#set_ignore_default_scope(model, value) ⇒ Object


104
105
106
# File 'activerecord/lib/active_record/scoping.rb', line 104

def set_ignore_default_scope(model, value)
  set_value_for(@ignore_default_scope, model, value)
end