¿Cómo proceso una dirección URL en el rubí para extraer las partes componentes (esquema, nombre de usuario, contraseña, host, etc.)?
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
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
Otros consejos
Hay una href="http://ruby-doc.org/core/classes/URI.html" rel="nofollow"> URI clase que debe ayudar. Puede que tenga que sustituir el esquema de ssh
con http
con la mano primero sin embargo, no creo URI
entiende el esquema ssh
fuera de la caja.