Module: Zeitwerk::Registry
- Defined in:
- lib/zeitwerk/registry.rb,
lib/zeitwerk/registry/inceptions.rb,
lib/zeitwerk/registry/explicit_namespaces.rb
Overview
:nodoc: all
Defined Under Namespace
Modules: ExplicitNamespaces, Inceptions
Class Attribute Summary collapse
-
.autoloads ⇒ Object
readonly
Maps absolute paths to the loaders responsible for them.
-
.gem_loaders_by_root_file ⇒ Object
readonly
Registers gem loaders to let ‘for_gem` be idempotent in case of reload.
-
.loaders ⇒ Object
readonly
Keeps track of all loaders.
Class Method Summary collapse
- .loader_for(path) ⇒ Object
-
.loader_for_gem(root_file, namespace:, warn_on_extra_files:) ⇒ Object
This method returns always a loader, the same instance for the same root file.
- .on_unload(loader) ⇒ Object
- .register_autoload(loader, abspath) ⇒ Object
-
.register_loader(loader) ⇒ Object
Registers a loader.
- .unregister_autoload(abspath) ⇒ Object
- .unregister_loader(loader) ⇒ Object
Class Attribute Details
.autoloads ⇒ Object (readonly)
Maps absolute paths to the loaders responsible for them.
This information is used by our decorated ‘Kernel#require` to be able to invoke callbacks and autovivify modules.
29 30 31 |
# File 'lib/zeitwerk/registry.rb', line 29 def autoloads @autoloads end |
.gem_loaders_by_root_file ⇒ Object (readonly)
Registers gem loaders to let ‘for_gem` be idempotent in case of reload.
20 21 22 |
# File 'lib/zeitwerk/registry.rb', line 20 def gem_loaders_by_root_file @gem_loaders_by_root_file end |
.loaders ⇒ Object (readonly)
Keeps track of all loaders. Useful to broadcast messages and to prevent them from being garbage collected.
14 15 16 |
# File 'lib/zeitwerk/registry.rb', line 14 def loaders @loaders end |
Class Method Details
.loader_for(path) ⇒ Object
70 71 72 |
# File 'lib/zeitwerk/registry.rb', line 70 def loader_for(path) autoloads[path] end |
.loader_for_gem(root_file, namespace:, warn_on_extra_files:) ⇒ Object
This method returns always a loader, the same instance for the same root file. That is how Zeitwerk::Loader.for_gem is idempotent.
52 53 54 |
# File 'lib/zeitwerk/registry.rb', line 52 def loader_for_gem(root_file, namespace:, warn_on_extra_files:) gem_loaders_by_root_file[root_file] ||= GemLoader.__new(root_file, namespace: namespace, warn_on_extra_files: warn_on_extra_files) end |
.on_unload(loader) ⇒ Object
76 77 78 |
# File 'lib/zeitwerk/registry.rb', line 76 def on_unload(loader) autoloads.delete_if { |_path, object| object == loader } end |
.register_autoload(loader, abspath) ⇒ Object
58 59 60 |
# File 'lib/zeitwerk/registry.rb', line 58 def register_autoload(loader, abspath) autoloads[abspath] = loader end |
.register_loader(loader) ⇒ Object
Registers a loader.
35 36 37 |
# File 'lib/zeitwerk/registry.rb', line 35 def register_loader(loader) loaders << loader end |
.unregister_autoload(abspath) ⇒ Object
64 65 66 |
# File 'lib/zeitwerk/registry.rb', line 64 def unregister_autoload(abspath) autoloads.delete(abspath) end |
.unregister_loader(loader) ⇒ Object
41 42 43 44 45 |
# File 'lib/zeitwerk/registry.rb', line 41 def unregister_loader(loader) loaders.delete(loader) gem_loaders_by_root_file.delete_if { |_, l| l == loader } autoloads.delete_if { |_, l| l == loader } end |