]> source.dussan.org Git - redmine.git/commitdiff
Ruby 2.7: Remove deprecated URI.escape/unescape (#32752).
authorGo MAEDA <maeda@farend.jp>
Thu, 23 Jan 2020 23:28:34 +0000 (23:28 +0000)
committerGo MAEDA <maeda@farend.jp>
Thu, 23 Jan 2020 23:28:34 +0000 (23:28 +0000)
Patch by Go MAEDA.

git-svn-id: http://svn.redmine.org/redmine/trunk@19455 e93f8b46-1217-0410-a6f0-8f06a7374b81

.rubocop_todo.yml
Gemfile
lib/redmine/field_format.rb
lib/redmine/scm/adapters/subversion_adapter.rb
test/functional/wiki_controller_test.rb

index 146ad2287186993082e0b7999418c538a2b705bf..1108348485a50bec976f5d541045cc2811980c5c 100644 (file)
@@ -441,12 +441,6 @@ Lint/UnusedBlockArgument:
 Lint/UnusedMethodArgument:
   Enabled: false
 
-Lint/UriEscapeUnescape:
-  Exclude:
-    - 'lib/redmine/field_format.rb'
-    - 'lib/redmine/scm/adapters/subversion_adapter.rb'
-    - 'test/functional/wiki_controller_test.rb'
-
 Lint/UselessAssignment:
   Enabled: false
 
diff --git a/Gemfile b/Gemfile
index 930b3bc821140535d31a169e4d3d513e3aa34c82..811212e6f155d444a144ce8b6b87bd35fd69ab1d 100644 (file)
--- a/Gemfile
+++ b/Gemfile
@@ -15,6 +15,7 @@ gem "csv", "~> 3.1.1"
 gem "nokogiri", "~> 1.10.0"
 gem "i18n", "~> 1.6.0"
 gem "rbpdf", "~> 1.20.0"
+gem 'addressable'
 
 # Windows does not include zoneinfo files, so bundle the tzinfo-data gem
 gem 'tzinfo-data', platforms: [:mingw, :x64_mingw, :mswin]
index d063d1ccf6005367e9841231eb5c13d677765865..1df164e0a395a57e31650368bd0ac1f0a108dd8a 100644 (file)
@@ -269,15 +269,15 @@ module Redmine
       # %m1%, %m2%... => capture groups matches of the custom field regexp if defined
       def url_from_pattern(custom_field, value, customized)
         url = custom_field.url_pattern.to_s.dup
-        url.gsub!('%value%') {URI.encode value.to_s}
-        url.gsub!('%id%') {URI.encode customized.id.to_s}
+        url.gsub!('%value%') {Addressable::URI.encode value.to_s}
+        url.gsub!('%id%') {Addressable::URI.encode customized.id.to_s}
         url.gsub!('%project_id%') {
-          URI.encode(
+          Addressable::URI.encode(
             (customized.respond_to?(:project) ? customized.project.try(:id) : nil).to_s
           )
         }
         url.gsub!('%project_identifier%') {
-          URI.encode(
+          Addressable::URI.encode(
             (customized.respond_to?(:project) ? customized.project.try(:identifier) : nil).to_s
           )
         }
@@ -285,7 +285,7 @@ module Redmine
           url.gsub!(%r{%m(\d+)%}) do
             m = $1.to_i
             if matches ||= value.to_s.match(Regexp.new(custom_field.regexp))
-              URI.encode matches[m].to_s
+              Addressable::URI.encode matches[m].to_s
             end
           end
         end
index 09b4aacb5b36b4cc6b3a930b4693cf68d0defd0f..8748641ce41a77420ba9942b16eb2bdc822bbb14 100644 (file)
@@ -108,7 +108,7 @@ module Redmine
                 next if entry['kind'] == 'dir' && commit_date.nil?
 
                 name = entry['name']['__content__']
-                entries << Entry.new({:name => URI.unescape(name),
+                entries << Entry.new({:name => CGI.unescape(name),
                             :path => ((path.empty? ? "" : "#{path}/") + name),
                             :kind => entry['kind'],
                             :size => ((s = entry['size']) ? s['__content__'].to_i : nil),
@@ -289,7 +289,7 @@ module Redmine
         def target(path = '')
           base = /^\//.match?(path) ? root_url : url
           uri = "#{base}/#{path}"
-          uri = URI.escape(URI.escape(uri), '[]')
+          uri = Addressable::URI.encode(uri)
           shell_quote(uri.gsub(/[?<>\*]/, ''))
         end
       end
index 70b892ba5b6bfab6c8ac451693449264624e7d7e..bb76f51e8d4f5859b950251aa1ecb96a6557ccf6 100644 (file)
@@ -1149,7 +1149,7 @@ class WikiControllerTest < Redmine::ControllerTest
       @request.user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36 Edge/15.15063'
       get :show, :params => {:project_id => 1, :id => title, :format => format}
       assert_response :success
-      filename = URI.encode("#{title}.#{format}")
+      filename = Addressable::URI.encode("#{title}.#{format}")
       assert_equal "attachment; filename=\"#{filename}\"",
                    @response.headers['Content-Disposition']
     end