Project

General

Profile

Actions

Feature #19889

closed

Let `Kernel.#require` search for files relative to the current working directory for non ./, ../ relative paths

Added by sawa (Tsuyoshi Sawada) 8 months ago. Updated 8 months ago.

Status:
Feedback
Assignee:
-
Target version:
-
[ruby-core:114796]

Description

My understanding is that ./ and ../ in the given path argument are interpreted relative to:

(1)

  • The current working directory (for load or require)
  • The requiring file's path (for require_relative)

which shows a division of labor between the methods, and seems reasonable. However, when it comes to other relative paths (e.g., foo/bar.rb), they are interpreted relative to:

(2)

  • Paths in $LOAD_PATH (for require)
  • Paths in $LOAD_PATH or the current working directory (for load or require_relative)

For example, given:

  • File some_path/foo/a.rb
  • File some_path/b.rb with content require "foo/a"
  • Current directory at some_path,

running ruby b.rb raises a LoadError, but given:

  • File some_path/foo/a.rb
  • File some_path/b.rb with content require_relative "foo/a"
  • Current directory at some_path,

running ruby b.rb does not raise an error.

The search path in (2) for require is a proper subset of that of load and require_relative. There is no division of labor here; there is only inconvenience for require.

Furthermore, in (1), require (as well as load) is concerned with the current working directory while require_relative is not, but in (2), the relation is reversed: require_relative (as well as load) is concerned with the current working directory while require is not.

This situation is making the specification of require versus require_relative difficult to understand, as well as causing inconvenience.

Proposal: For non-./-or-../ relative paths, I propose to let Kernel.#require search relative to the current working directory if the file is not found relative to the paths in $LOAD_PATH, so that the methods load, require, and require_relative all work the same in this respect.

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0