есть ли лучший способ, который бы работал независимо от того, где заканчивается цепочка родительских каталогов?
Где еще заканчивается цепочка родительских каталогов, кроме корневого? Структура каталогов накопителя - это дерево или перевернутое дерево, если вы хотите думать об этом таким образом. Корневой каталог всегда один и тот же; Это так низко, как вы можете пойти.
Ваш код в порядке. Вы могли бы сделать это альтернативными способами, но я сомневаюсь, что вы получите много ясности или простоты. Возможно, вы найдете что-то быстрее, но можете обменять два других на небольшую разницу в скорости, и я сомневаюсь, что вы заметите ускорение.
Это не уникальный код Ruby, т. Е. Обычно мы используем массив и перебираем его каким-либо образом, но я не вижу, чтобы такая практика приносила вам много денег с точки зрения простоты или чистоты.
Я даю вам 90% и серебряную звезду. Хорошая работа.
EDIT:
Мне нравится ответ, который дал @Джон Феминелла. Это здравый смысл, позволяющий определить, когда вы попали в корень системы накопителей, и будет хорошо работать на кроссплатформенном уровне. Я не могу придумать ни одной системы, которая бы давала вам произвольно меняющееся корневое обозначение, поэтому продолжайте цикл, пока каталог больше не изменится.