Подтвердить что ты не робот

Есть ли библиотека Ruby/gem, которая будет генерировать URL-адрес на основе набора параметров?

Механизм генерации URL-адресов Rails (большинство из которых проходит через polymorphic_url в какой-то момент) позволяет передавать хэш, который сериализуется в строку запроса, по крайней мере, для запросов GET. Какой лучший способ получить такую ​​функциональность, но поверх любого базового пути?

Например, я хотел бы иметь что-то вроде следующего:

generate_url('http://www.google.com/', :q => 'hello world')
  # => 'http://www.google.com/?q=hello+world'

Я мог бы, конечно, написать свой собственный, который строго соответствует моим требованиям к приложениям, но если бы существовала какая-то каноническая библиотека, чтобы позаботиться об этом, я бы предпочел использовать это:).

4b9b3361

Ответ 1

Да, в стандартной библиотеке Ruby вы найдете целый модуль классов для работы с URI. Там один для HTTP. Вы можете вызвать #build с некоторыми аргументами, как вы показали.

http://www.ruby-doc.org/stdlib/libdoc/uri/rdoc/classes/URI/HTTP.html#M009497

Для самой строки запроса просто используйте добавление хэша Rails #to_query. то есть.

uri = URI::HTTP.build(:host => "www.google.com", :query => { :q => "test" }.to_query)

Ответ 2

Поздно к вечеринке, но позвольте мне настоятельно рекомендовать Addressable gem. В дополнение к другим полезным функциям он поддерживает запись и анализ uri с помощью шаблонов RFC 6570 URI. Чтобы адаптировать данный пример, попробуйте:

gsearch = Addressable::Template.new('http://google.com/{?query*}')
gsearch.expand(query: {:q => 'hello world'}).to_s
# => "http://www.google.com/?q=hello%20world"

или

gsearch = Addressable::Template.new('http://www.google.com/{?q}')
gsearch.expand(:q => 'hello world').to_s
# => "http://www.google.com/?q=hello%20world"