Замена для URI.escape, который избегает предупреждений Lint / UriEscapeUnescape? - PullRequest
0 голосов
/ 17 октября 2018

Не уверен, как исправить Рубокоп Lint / UriEscapeUnescape предупреждение

Попытка замены URI на CGI, думая, что это была замена "падение в", нокоторый взорвал набор тестов.

Вот ошибка, за которой следует строка кода, где используется URI:

app/models/media_file.rb:76:5: W: Lint/UriEscapeUnescape: URI.escape method is obsolete and should not be used. Instead, use CGI.escape, URI.encode_www_form or URI.encode_www_form_component depending on your specific use case.
    URI ...
    ^^^

    # app/models/media_file.rb
    ...
    def cdn_url(format: nil)
    if format.nil?
      "#{s3_config.cloudfront_endpoint}/#{escape_url(key)}"
    elsif converted_urls.with_indifferent_access[format.to_s]
      filename = converted_urls.with_indifferent_access[format.to_s]
      if URI.parse(escape_url(filename)).host
        filename
      else
        "#{s3_config.cloudfront_endpoint}/#{escape_url(filename)}"
      end
    else
      converted(url)
    end
  end
...
  private

  def escape_url(url)
    URI
      .escape(url)
      .gsub(/\(/, '%28')
      .gsub(/\)/, '%29')
      .gsub(/\[/, '%5B')
      .gsub(/\]/, '%5D')
  end

РЕДАКТИРОВАТЬ: Добавление примера выводастрок, экранированных с URI и CGI:

            url: images/medium/test-image.jpg
URI.escape(url): images/medium/test-image.jpg
CGI.escape(url): images%2Fmedium%2Ftest-image.jpg

            url: images/medium/test-image.jpg
URI.escape(url): images/medium/test-image.jpg
CGI.escape(url): images%2Fmedium%2Ftest-image.jpg

Может показаться, что CGI не является заменой URI, так как вы могли бы поверить в ошибку листинга.Мысли?

...