Como processo uma URL em Ruby para extrair as partes componentes (esquema, nome de usuário, senha, host, etc.)?
Pergunta
Estou tentando criar um programa usando Ruby (e Net::SSH) para conectar-se a servidores e executar algumas tarefas.Os detalhes do servidor devem ser fornecidos como algo como:
ssh://user:pass@host:port (for a host that does not yet have SSH keys)
ou
user@host
Net::SSH espera o seguinte formato:
Net::SSH.start('host', 'user', :password => "password")
Existem gem/stdlib que podem processar a URL neste formato?Ou um regex simples que pode corresponder às diferentes partes?
Observação:Conheço e uso o capistrano, mas neste caso preciso de um controle de nível inferior.
Solução
Ambos URI e Endereçável::URI pode analisar URLs e permitir que você os divida em seus componentes.
O URI está incluído na Biblioteca Padrão do Ruby, o que é legal, mas Addressable::URI tem mais recursos e é o que eu uso quando tenho que trabalhar muito em URLs.
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
Outras dicas
Existe um URI aula que deve ajudar.Você pode ter que substituir o ssh
esquema com http
primeiro à mão, não acho URI
entende o ssh
esquema fora da caixa.