Как обрабатывать URL в Ruby, чтобы извлечь компонентные детали (схема, имя пользователя, пароль, хост и т. Д.)?
Вопрос
Я пытаюсь создать программу с помощью Ruby (и Net :: SSH) для подключения к серверам и выполнять некоторые задачи. Детали сервера должны быть предоставлены как что-то вроде:
ssh://user:pass@host:port (for a host that does not yet have SSH keys)
или
user@host
Net :: SSH ожидает следующий формат:
Net::SSH.start('host', 'user', :password => "password")
Есть ли GEM / STDLIB, который может обработать URL в этот формат? Или простое регез, которое может соответствовать разным частям?
ПРИМЕЧАНИЕ. Я знаю, и использую, Capistrano, но в этом случае мне нужен более низкий уровень контроля уровня.
Решение
Обе Уваживание а также Адресна :: Ури Может разбирать URL-адреса и позволить вам сломать их на их компоненты.
URI включен в стандартную библиотеку Ruby, которая хорошая, но удовлетворена :: URI имеет больше функций, и это то, что я использую, когда я должен сделать много работы по URL.
require 'addressable/uri'
uri = Addressable::URI.parse('ssh://user:pass@www.example.com:81')
uri.host # => "www.example.com"
uri.user # => "user"
uri.password # => "pass"
uri.scheme # => "ssh"
uri.port # => 81
require 'uri'
uri = URI.parse('ssh://user:pass@www.example.com:81')
uri.host # => "www.example.com"
uri.user # => "user"
uri.password # => "pass"
uri.scheme # => "ssh"
uri.port # => 81
Другие советы
Eсть Уваживание класс, который должен помочь. Возможно, вам придется заменить ssh
схема с http
вручную, сначала, я не думаю URI
понимает то ssh
Схема из коробки.