require/autoload_in_a_module_parens.rb
tests/_examples/require/autoload_in_a_module_parens.rb in the metorex repository.
# `autoload` inside a module's method registers on that module, since that is
# the scope the call sits in. `Kernel.autoload` registers in the same place.
target = File.expand_path("autoload_lib/module_autoload_target.rb", __dir__)
module Holder
def register(file)
autoload(:FromModuleMethod, file)
end
def register_through_kernel(file)
Kernel.autoload(:AlsoFromModuleMethod, file)
end
end
class Uses
include Holder
end
Uses.new.register(target)
puts(Holder.autoload?(:FromModuleMethod) == target)
puts(Uses.autoload?(:FromModuleMethod) == target)
puts(Object.autoload?(:FromModuleMethod).inspect)
Uses.new.register_through_kernel(target)
puts(Holder.autoload?(:AlsoFromModuleMethod) == target)
puts(Object.autoload?(:AlsoFromModuleMethod).inspect)
puts(Holder::FromModuleMethod.loaded)
Output:
true
true
nil
true
nil
from_a_module_method