Come faccio ad elaborare un URL in Ruby per estrarre i componenti (schema, nome utente, password, padrone di casa, ecc)?
Domanda
Sto cercando di creare un programma usando rubino (e Net :: SSH) per connettersi ai server e di eseguire alcuni compiti. I dettagli del server sono da fornire come qualcosa di simile:
ssh://user:pass@host:port (for a host that does not yet have SSH keys)
o
user@host
Net :: SSH si aspetta il seguente formato:
Net::SSH.start('host', 'user', :password => "password")
È che ci sono gemma / stdlib in grado di elaborare l'URL in questo formato? O una semplice espressione regolare che può abbinare le diverse parti?
Nota:. Sono consapevole di, e l'uso, Capistrano ma in questo caso ho bisogno di abbassare il controllo di livello
Soluzione
URI e indirizzabile :: URI grado di analizzare gli URL e ti permettono di suddividerle in loro componenti.
URI è incluso nella libreria standard di Ruby, che è bello, ma indirizzabile :: URI ha più funzioni, ed è quello che uso quando devo fare un sacco di lavoro su 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
Altri suggerimenti
C'è un URI classe che dovrebbe aiutare. Potrebbe essere necessario sostituire il sistema ssh
con http
a mano prima, però, non credo che URI
capisce lo schema ssh
out of the box.