Como processo uma URL em Ruby para extrair as partes componentes (esquema, nome de usuário, senha, host, etc.)?

StackOverflow https://stackoverflow.com/questions/4274213

  •  28-09-2019
  •  | 
  •  

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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top