#ruby
#ruby
Вопрос:
Допустим, у меня есть URL, подобный этому: http://www.rubinassociatespa.com/AccountantBocaRaton.html
Я хочу просто извлечь базовый домен — http://www.rubinassociatespa.com
Я не могу понять, как это сделать, используя класс ruby URI, хотя без выполнения манипуляций со строками.
[36] pry(#<YPCrawler::PageParser>)> @url
=> "http://www.rubinassociatespa.com/AccountantBocaRaton.html"
[37] pry(#<YPCrawler::PageParser>)> URI(@url).scheme
=> "http"
[38] pry(#<YPCrawler::PageParser>)> URI(@url).host
=> "www.rubinassociatespa.com"
Чтобы сделать это с помощью манипулирования строками, мне пришлось бы сделать что-то вроде:
URI(@url).scheme "://" URI(@url).host
Но это кажется халтурным.
Есть ли более «родной» способ сделать это? Какой-нибудь классный метод или что-то еще в URI
классе, который может элегантно справиться с этим?
Комментарии:
1. готовых методов не существует.
Ответ №1:
Я всегда использую:
▶ uri.to_s[/A.*(?=#{uri.path}z)/]
#⇒ "http://www.rubinassociatespa.com"
Это безопасно, поскольку это именно то, чем является базовый домен: весь URI без пути.
Пожалуйста, обратите внимание, что не будет никакого унифицированного метода из-за расширяемости класса URI и гибкости самого RFC.
Комментарии:
1. Он прерывается, если в uri есть запрос. Тогда, возможно, лучше использовать решение OP.