123456789_123456789_123456789_123456789_123456789_

Class: ActiveRecord::Scoping::ScopeRegistry

Do not use. This class is for internal use only.
Relationships & Source Files
Inherits: Object
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

Instance Attribute Summary

Instance Method Summary

Constructor Details

.newScopeRegistry

[ GitHub ]

  
# File 'activerecord/lib/active_record/scoping.rb', line 86

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

Class Method Details

.instance

[ GitHub ]

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

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

Instance Attribute Details

#current_scope(model, skip_inherited_scope = false) (readonly)

[ GitHub ]

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

delegate :current_scope, :set_current_scope, :ignore_default_scope, :set_ignore_default_scope,
  :global_current_scope, :set_global_current_scope, to: :instance

#global_current_scope(model, skip_inherited_scope = false) (readonly)

[ GitHub ]

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

delegate :current_scope, :set_current_scope, :ignore_default_scope, :set_ignore_default_scope,
  :global_current_scope, :set_global_current_scope, to: :instance

#ignore_default_scope(model, skip_inherited_scope = false) (readonly)

[ GitHub ]

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

delegate :current_scope, :set_current_scope, :ignore_default_scope, :set_ignore_default_scope,
  :global_current_scope, :set_global_current_scope, to: :instance

#set_current_scope(model, value) (readonly)

[ GitHub ]

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

delegate :current_scope, :set_current_scope, :ignore_default_scope, :set_ignore_default_scope,
  :global_current_scope, :set_global_current_scope, to: :instance

#set_global_current_scope(model, value) (readonly)

[ GitHub ]

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

delegate :current_scope, :set_current_scope, :ignore_default_scope, :set_ignore_default_scope,
  :global_current_scope, :set_global_current_scope, to: :instance

#set_ignore_default_scope(model, value) (readonly)

[ GitHub ]

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

delegate :current_scope, :set_current_scope, :ignore_default_scope, :set_ignore_default_scope,
  :global_current_scope, :set_global_current_scope, to: :instance

Instance Method Details

#set_value_for(scope_type, model, value) (private)

Sets the value for a given scope_type and model.

[ GitHub ]

  
# File 'activerecord/lib/active_record/scoping.rb', line 131

def set_value_for(scope_type, model, value)
  scope_type[model.name] = value
end

#value_for(scope_type, model, skip_inherited_scope = false) (private)

Obtains the value for a given scope_type and model.

[ GitHub ]

  
# File 'activerecord/lib/active_record/scoping.rb', line 118

def value_for(scope_type, model, skip_inherited_scope = false)
  return scope_type[model.name] if skip_inherited_scope
  klass = model
  base = model.base_class
  while klass != base
    value = scope_type[klass.name]
    return value if value
    klass = klass.superclass
  end
  scope_type[klass.name]
end