По мере того, как Ruby развивался годами, ответ различается в разных версиях.
После 1.9.2
Ruby 1.9.2 увидел decode_www_form
и encode_www_form
, добавленные в модуль URI,упрощение параметров кодирования.
require 'uri'
uri = URI.parse("http://www.youtube.com/watch?v=og9B3BEnBHo")
new_query_ar = URI.decode_www_form(uri.query || '') << ["wmode", "opaque"]
uri.query = URI.encode_www_form(new_query_ar)
puts uri.to_s
Пояснение
URI.decode_www_form
разбивает строку параметров запроса (uri.query
) на вложенный массив параметров ([["v", "og9B3BEnBHo"]]
)
uri.query || ''
предоставляет либо строку запроса uri, либо, если она не существует, пустую строку.Это предотвращает ошибку decode_www_form
, если uri.query
равен nil
.
<< ["wmode", "opaque"]
добавляет еще один элемент в массив параметров запроса.Вы можете добавить больше, расширив new_query_ar
: new_query_ar << ["fullscreen", "1"]
URI.encode_www_form
, кодируя вложенный массив новых параметров запроса в строку.
До 1.9.2
require 'uri'
uri = URI.parse("http://www.youtube.com/watch?v=og9B3BEnBHo")
uri.query = [uri.query, "wmode=opaque"].compact.join('&')
puts uri.to_s
Пояснение
[uri.query, "wmode=opaque"]
- это массив всех возможных параметров запроса.Вы можете добавить больше, расширив массив: [uri.query, "wmode=opaque", "fullscreen=1"]
или добавив к последнему элементу: "wmode=opaque&fullscreen=1"
compact
удаляет nil
элементов из массива, таким образом, он удаляетuri.query
если нет параметра запроса.
join
, наконец, объединяет их в строку запроса.