Я работаю над записью документа на получение сборки граблей, который будет работать кросс-платформенный (MAC OSX, Linux, Windows). Сценарий сборки будет использован сервером CI.
Я хочу, чтобы логика моего сценария была следующим образом:
Я в настоящее время использую Pathname.new (местоположение) .absolute? но это не работает правильно над окнами.
Какой подход Вы предложили бы для этого?
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.
Путь
может сделать все это за вас
require "pathname"
home= Pathname.new("/home/foo")
home + Pathname.new("/bin") # => #<Pathname:/bin>
home + Pathname.new("documents") # => #<Pathname:/home/foo/documents>
Я не уверен насчет этого в Windows.
Вы также можете использовать File.expand_path
, если относительный каталог относится к текущему рабочему каталогу.
Я проверил Linux и Windows, и у меня не было никаких проблем.
Предполагая, что FOO_HOME
является рабочим каталогом, код будет:
output_path = File.expand_path user_supplied_relative_path
] require 'pathname'
(Pathname.new "/foo").absolute? # => true
(Pathname.new "foo").absolute? # => false