require/load_semantics_parens.rb

tests/_examples/require/load_semantics_parens.rb in the metorex repository.

$load_count = 0
lib = File.expand_path("load_lib/counted.rb", __dir__)

load(lib)
load(lib)
puts($load_count)
puts($LOADED_FEATURES.include?(lib))

require(lib)
puts($load_count)
require(lib)
puts($load_count)

class PathLike
  def to_path
    File.expand_path "load_lib/counted.rb", File.dirname(__FILE__)
  end
end

load(PathLike.new)
puts($load_count)

begin
  load("./does_not_exist_here.rb")
rescue LoadError => error
  puts(error.message)
end

begin
  load(42)
rescue TypeError => error
  puts(error.message)
end

puts(File::Separator)
puts(Process.euid == Process.uid)
puts(Kernel.private_instance_methods.include?(:load))

wrapper = Module.new
load(File.expand_path("load_lib/wrapped.rb", __dir__), wrapper)
puts(Object.const_defined?(:WRAPPED_CONSTANT))
puts(wrapper.const_get(:WRAPPED_CONSTANT))
puts(wrapper.instance_methods.include?(:wrapped_method))
# A method written at the top level of a wrapped load is private there.
puts(wrapper.private_instance_methods.include?(:wrapped_method))

Output:

2
false
3
3
4
cannot load such file -- ./does_not_exist_here.rb
no implicit conversion of Integer into String
/
true
true
false
wrapped
false
true