Module: ActiveSupport::Dependencies
Relationships & Source Files | |
Namespace Children | |
Modules:
| |
Classes:
| |
Defined in: | activesupport/lib/active_support/dependencies.rb, activesupport/lib/active_support/dependencies/interlock.rb |
Class Method Summary
-
.clear
Private method that reloads constants autoloaded by the main autoloader.
-
.eager_load?(path) ⇒ Boolean
Private method that helps configuring the autoloaders.
-
.load_interlock(&block)
Execute the supplied block while holding an exclusive lock, preventing any other thread from being inside a
#run_interlock
block at the same time. -
.run_interlock(&block)
Execute the supplied block without interference from any concurrent loads.
-
.search_for_file(relpath)
Private method used by require_dependency.
-
.unload_interlock(&block)
Execute the supplied block while holding an exclusive lock, preventing any other thread from being inside a
#run_interlock
block at the same time.
Instance Attribute Summary
-
#_autoloaded_tracked_classes
rw
If reloading is enabled, this private set holds autoloaded classes tracked by the descendants tracker.
-
#_eager_load_paths
rw
This is a private set that collects all eager load paths during bootstrap.
-
#autoload_once_paths
rw
The array of directories from which we autoload and never reload, even if reloading is enabled.
-
#autoload_paths
rw
The array of directories from which we autoload and reload, if reloading is enabled.
-
#autoloader
rw
If reloading is enabled, this private attribute stores the main autoloader of a
::Rails
application. - #interlock rw
Class Method Details
.clear
Private method that reloads constants autoloaded by the main autoloader.
Rails.application.reloader.reload! is the public interface for application reload. That involves more things, like deleting unloaded classes from the internal state of the descendants tracker, or reloading routes.
# File 'activesupport/lib/active_support/dependencies.rb', line 75
def self.clear unload_interlock do _autoloaded_tracked_classes.clear autoloader.reload end end
.eager_load?(path) ⇒ Boolean
Private method that helps configuring the autoloaders.
# File 'activesupport/lib/active_support/dependencies.rb', line 93
def self.eager_load?(path) _eager_load_paths.member?(path) end
.load_interlock(&block)
Execute the supplied block while holding an exclusive lock, preventing any other thread from being inside a #run_interlock
block at the same time.
# File 'activesupport/lib/active_support/dependencies.rb', line 23
def self.load_interlock(&block) interlock.loading(&block) end
.run_interlock(&block)
Execute the supplied block without interference from any concurrent loads.
# File 'activesupport/lib/active_support/dependencies.rb', line 16
def self.run_interlock(&block) interlock.running(&block) end
.search_for_file(relpath)
Private method used by require_dependency.
# File 'activesupport/lib/active_support/dependencies.rb', line 83
def self.search_for_file(relpath) relpath += ".rb" unless relpath.end_with?(".rb") autoload_paths.each do |autoload_path| abspath = File.join(autoload_path, relpath) return abspath if File.file?(abspath) end nil end
.unload_interlock(&block)
Execute the supplied block while holding an exclusive lock, preventing any other thread from being inside a #run_interlock
block at the same time.
# File 'activesupport/lib/active_support/dependencies.rb', line 30
def self.unload_interlock(&block) interlock.unloading(&block) end
Instance Attribute Details
#_autoloaded_tracked_classes (rw)
If reloading is enabled, this private set holds autoloaded classes tracked by the descendants tracker. It is populated by an on_load callback in the main autoloader. Used to clear state.
# File 'activesupport/lib/active_support/dependencies.rb', line 61
singleton_class.attr_accessor :_autoloaded_tracked_classes
#_eager_load_paths (rw)
This is a private set that collects all eager load paths during bootstrap. Useful for Zeitwerk integration. The public interface to push custom directories to this collection from applications or engines is config.eager_load_paths.
# File 'activesupport/lib/active_support/dependencies.rb', line 55
singleton_class.attr_accessor :_eager_load_paths
#autoload_once_paths (rw)
The array of directories from which we autoload and never reload, even if reloading is enabled. The public interface to push directories to this collection from applications or engines is config.autoload_once_paths.
# File 'activesupport/lib/active_support/dependencies.rb', line 48
singleton_class.attr_accessor :autoload_once_paths
#autoload_paths (rw)
The array of directories from which we autoload and reload, if reloading is enabled. The public interface to push directories to this collection from applications or engines is config.autoload_paths.
This collection is allowed to have intersection with autoload_once_paths. Common directories are not reloaded.
# File 'activesupport/lib/active_support/dependencies.rb', line 42
singleton_class.attr_accessor :autoload_paths
#autoloader (rw)
If reloading is enabled, this private attribute stores the main autoloader of a ::Rails
application. It is nil
otherwise.
The public interface for this autoloader is Rails.autoloaders.main
.
# File 'activesupport/lib/active_support/dependencies.rb', line 68
singleton_class.attr_accessor :autoloader
#interlock (rw)
[ GitHub ]# File 'activesupport/lib/active_support/dependencies.rb', line 9
singleton_class.attr_accessor :interlock