Поместите это в стандартный каталог библиотеки (где-то, который уже находится в вашем пути загрузки по умолчанию $:
):
# push-loadpath.rb
if caller.first
$: << File.expand_path(File.dirname(caller.first))
end
Тогда это должно работать
% ls /path/to/
bin.rb lib1.rb lib2.rb #...
% cat /path/to/bin.rb
load 'push-loadpath.rb'
require 'lib1'
require 'lib2'
#...
caller
дает вам доступ к текущему стеку вызовов и сообщает, какой файл и где, поэтому push-loadpath.rb
использует его, чтобы добавить файл, который load
сделал его в путь загрузки.
Обратите внимание, что вам следует load
файл, а не require
, чтобы тело можно было вызывать несколько раз (по одному разу для каждого изменения пути загрузки).
С другой стороны, вы можете обернуть тело методом,
# push-loadpath.rb
def push_loadpath
$: << File.expand_path(File.dirname(caller.first))
end
Это позволит вам require
использовать его следующим образом:
% ls /path/to/
bin.rb lib1.rb lib2.rb #...
% cat /path/to/bin.rb
require 'push-loadpath'
push_loadpath
require 'lib1'
require 'lib2'
#...