Учитывая путь, как определить если его абсолютное/относительное в Ruby?

Я работаю над записью документа на получение сборки граблей, который будет работать кросс-платформенный (MAC OSX, Linux, Windows). Сценарий сборки будет использован сервером CI.

Я хочу, чтобы логика моего сценария была следующим образом:

  1. Если путь полон решимости быть относительным, сделайте его абсолютным путем создания output_path = FOO_HOME + user_supplied_relative_path
  2. Если путь полон решимости быть абсолютным, возьмите его как есть

Я в настоящее время использую Pathname.new (местоположение) .absolute? но это не работает правильно над окнами.

Какой подход Вы предложили бы для этого?

12
задан hagello 24 February 2016 в 12:55
поделиться

4 ответа

The method you're looking for is realpath.

Essentially you do this:

absolute_path = Pathname.new(path).realpath

N.B.: The Pathname module states that usage is experimental on machines that do not have unix like pathnames. So it's implementation dependent. Looks like JRuby should work on Windows.

9
ответ дан 2 December 2019 в 03:38
поделиться

Путь может сделать все это за вас

require "pathname"
home= Pathname.new("/home/foo")

home + Pathname.new("/bin") # => #<Pathname:/bin>
home + Pathname.new("documents") # => #<Pathname:/home/foo/documents>

Я не уверен насчет этого в Windows.

1
ответ дан 2 December 2019 в 03:38
поделиться

Вы также можете использовать File.expand_path , если относительный каталог относится к текущему рабочему каталогу.

Я проверил Linux и Windows, и у меня не было никаких проблем.

Предполагая, что FOO_HOME является рабочим каталогом, код будет:

output_path = File.expand_path user_supplied_relative_path
]
1
ответ дан 2 December 2019 в 03:38
поделиться
require 'pathname'
(Pathname.new "/foo").absolute? # => true
(Pathname.new "foo").absolute? # => false
27
ответ дан 2 December 2019 в 03:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: