¿Cómo proceso una dirección URL en el rubí para extraer las partes componentes (esquema, nombre de usuario, contraseña, host, etc.)?

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

  •  28-09-2019
  •  | 
  •  

Pregunta

Estoy intentando crear un programa usando Ruby (y Net :: SSH) para conectarse a servidores y realizar algunas tareas. Los detalles del servidor se pueden proporcionar como a algo como:

ssh://user:pass@host:port (for a host that does not yet have SSH keys)

o

user@host

Net :: SSH espera que el siguiente formato:

Net::SSH.start('host', 'user', :password => "password")

es que hay gema / stdlib que puede procesar la dirección URL en este formato? O una simple expresión regular que puede coincidir con las diferentes partes?

Nota:. Soy consciente de, y su uso, Capistrano, pero en este caso menor necesidad de control de nivel

¿Fue útil?

Solución

Tanto URI y direccionable :: URI puede analizar las direcciones URL y le permiten descomponerlos en sus componentes.

URI está incluido en la biblioteca estándar de Ruby, lo cual es bueno, pero direccionable :: URI tiene más características, y es lo que uso cuando tengo que hacer un montón de trabajo en las direcciones 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
scroll top