module Kernel
Public Instance Methods
require(path)
click to toggle source
@sig (String) -> true | false
# File lib/zeitwerk/kernel.rb, line 23 def require(path) if loader = Zeitwerk::Registry.loader_for(path) if path.end_with?(".rb") required = zeitwerk_original_require(path) loader.__on_file_autoloaded(path) if required required else loader.__on_dir_autoloaded(path) true end else required = zeitwerk_original_require(path) if required abspath = $LOADED_FEATURES.last if loader = Zeitwerk::Registry.loader_for(abspath) loader.__on_file_autoloaded(abspath) end end required end end
Also aliased as: zeitwerk_original_require
zeitwerk_original_require(path)
Zeitwerk's main idea is to define autoloads for project constants, and then intercept them when triggered in this thin `Kernel#require` wrapper.
That allows us to complete the circle, invoke callbacks, autovivify modules, define autoloads for just autoloaded namespaces, update internal state, etc.
On the other hand, if you publish a new version of a gem that is now managed by Zeitwerk
, client code can reference directly your classes and modules and should not require anything. But if someone has legacy require calls around, they will work as expected, and in a compatible way. This feature is by now EXPERIMENTAL and UNDOCUMENTED.
Alias for: require