RubyのURLを処理してコンポーネントパーツ(スキーム、ユーザー名、パスワード、ホストなど)を抽出するにはどうすればよいですか?
質問
Ruby(およびNet :: SSH)を使用してプログラムを作成してサーバーに接続し、いくつかのタスクを実行しようとしています。サーバーの詳細は、次のようなものとして提供されます。
ssh://user:pass@host:port (for a host that does not yet have SSH keys)
また
user@host
net :: SSHは次の形式を期待しています。
Net::SSH.start('host', 'user', :password => "password")
この形式にURLを処理できるGEM/STDLIBはありますか?または、さまざまな部分に一致する可能性のある単純な正規表現ですか?
注:Capistranoを知っていて使用していますが、この場合、より低いレベルの制御が必要です。
解決
両方 uri と アドレス可能:: uri URLを解析し、それらをコンポーネントに分解できます。
URIはRubyの標準ライブラリに含まれていますが、これは素晴らしいですが、アドレス指定可能な:: URIにはより多くの機能があり、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
他のヒント
があります uri 役立つはずのクラス。あなたは置き換える必要があるかもしれません ssh
でスキーム http
しかし、最初に手で、私は考えていません URI
を理解しています ssh
箱から出してスキーム。
所属していません StackOverflow