Как мне извлечь корневой домен из домена, используя класс URI в Ruby?

#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.