Как мне обработать URL в ruby ​​для извлечения компонентов (схема, имя пользователя, пароль, хост и т. Д.)? - PullRequest
3 голосов
/ 25 ноября 2010

Я пытаюсь создать программу, используя 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 в этот формат? Или простое регулярное выражение, которое может соответствовать различным частям?

Примечание: я знаю и использую капистрано, но в этом случае мне нужен более низкий контроль уровня.

Ответы [ 2 ]

11 голосов
/ 25 ноября 2010

Оба URI и Addressable :: URI могут анализировать URL-адреса и позволяют разбивать их на их компоненты.

URI включен в стандартную библиотеку Ruby, что приятно, но Addressable :: 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
0 голосов
/ 25 ноября 2010

Существует класс URI , который должен помочь. Возможно, вам придется сначала заменить схему ssh на http вручную, хотя я не думаю, что URI понимает схему ssh из коробки.

...