Как получить путь звонящего из Ruby / Rake? - PullRequest
0 голосов
/ 30 октября 2018

В Ruby / Rake (гем для Ruby) текущий путь к файлу можно получить через Dir.pwd и __FILE__.

Бывают моменты, когда я хочу узнать путь вызывающего, например, выяснить относительный путь, предоставленный вызывающим, относительно его пути (но не относительно пути файла Rakefile).

Пример

В Rake-файле из каталога /home/me/workspace/proj:

# ...

task :foo do
  file_name = ENV['WHICH_FILE']

  # As I can not get the caller dir, give it the Rakefile dir instead
  caller_dir = Dir.pwd

  file_name = "#{call_dir}/#{file_name}" unless file_name&.match? /^\//
  puts File.read file_name
  # ...
end

# ...

Если вызывающая сторона указывает абсолютный путь к целевому файлу, нет проблем:

$ WHICH_FILE=/home/me/workspace/proj/suba/subb/subc/file.txt rake foo

Если вызывающий в /home/me/workspace/proj предоставляет относительный путь, все равно проблем нет:

$ WHICH_FILE=suba/subb/subc/file.txt rake foo

Если вызывающий в /home/me/workspace/proj/suba указывает относительный путь, имя_файла может указывать на неправильное место:

$ WHICH_FILE=subb/subc/file.txt rake foo

Теперь file_name будет /home/me/workspace/proj/subb/subc/file.txt, что может не соответствовать желанию вызывающего абонента.

Вопросы

Возможно ли получить путь звонящего в Ruby / Rake? Если это возможно, то как?

1 Ответ

0 голосов
/ 31 октября 2018

Вы можете сказать, где пользователь находится сейчас, как вы сказали, с помощью Dir.pwd, но нет никакого способа угадать, какой абсолютный путь действительно хочет пользователь.

Именно поэтому большинство сценариев (или приложений и т. Д.) Либо имеют ROOT_DIR, который позволяет вам использовать его по умолчанию в качестве префикса для остальной части структуры каталога, либо просто предполагает, что переданный файл находится в текущей папке (показано pwd).

Вы можете либо установить этот ROOT_DIR где-то в вашем коде, либо просто открывать возможность того, что пользователь даст вам относительный путь к файлу, не зная, каков абсолютный маршрут к этому файлу, и просто предположите, что он находится под их текущим каталогом. .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...