Оценить потенциальный относительный URI в контексте другого в Ruby - PullRequest
5 голосов
/ 19 апреля 2011

У меня есть два URI в программе Ruby.Одним из них является абсолютный URI, а другим может быть абсолютный или относительный.Я хотел бы превратить второй в абсолютный URI в контексте первого, поэтому, если первый равен http://pupeno.com/blog, а второй равен / about, результат должен быть http://pupeno.com/about.Есть идеи как это сделать?

Ответы [ 2 ]

11 голосов
/ 20 апреля 2011

Как встроенный URI в Ruby, так и гем Addressable делают это недолго.Я предпочитаю Addressable, потому что он более полнофункциональный, но URI встроен.

require 'uri'

URI.join('http://pupeno.com/blog', '/about') # => #<URI::HTTP:0x00000101098538 URL:http://pupeno.com/about>

или

require 'addressable/uri'

uri = Addressable::URI.parse('http://pupeno.com/blog')
uri.join('/about') # => #<Addressable::URI:0x806704a0 URI:http://pupeno.com/about>

Рекомендуется использовать поставляемые методы join, потому что онисделать некоторую проверку вменяемости, чтобы убедиться, что возвращенный адрес вменяемый.Непосредственное присвоение пути может привести к поломке, если у вас есть относительный URL-адрес и просто замените старый путь.join примет это во внимание и заменит или объединит, в зависимости от того, что подходит.

1 голос
/ 19 апреля 2011

Это сделает это:

require 'uri'
url=URI.parse('http://pupeno.com/blog')
=> #<URI::HTTP:0x00000100e35368 URL:http://pupeno.com/blog> 
ruby-1.9.2-p0 > url.path="/about"
=> "/about" 
ruby-1.9.2-p0 > url
=> #<URI::HTTP:0x00000100e35368 URL:http://pupeno.com/about> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...