summary refs log tree commit
diff options
context:
space:
mode:
authorRafael França <rafaelmfranca@gmail.com>2019-06-27 19:23:29 -0400
committerGitHub <noreply@github.com>2019-06-27 19:23:29 -0400
commit5e08d39b323d37fd354f63bac0fc30047c528e35 (patch)
treeea6970e5768999b0f7bbf26345f6a8736a78d21d
parent06f7c997706c612d7f8332d66f01daa303bd7c6c (diff)
parent33af8f378f2d521e2db3cbecea0e500b53d9d4a5 (diff)
downloadrack-5e08d39b323d37fd354f63bac0fc30047c528e35.tar.gz
Merge pull request #1368 from krzysiek1507/refactor/optimize-utils-select_best_encoding
Optimize Rack::Utils.select_best_encoding
-rw-r--r--lib/rack/utils.rb19
1 files changed, 9 insertions, 10 deletions
diff --git a/lib/rack/utils.rb b/lib/rack/utils.rb
index 2abe7572..36d396c0 100644
--- a/lib/rack/utils.rb
+++ b/lib/rack/utils.rb
@@ -181,27 +181,26 @@ module Rack
       # http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
 
       expanded_accept_encoding =
-        accept_encoding.map { |m, q|
+        accept_encoding.each_with_object([]) do |(m, q), list|
           if m == "*"
-            (available_encodings - accept_encoding.map { |m2, _| m2 }).map { |m2| [m2, q] }
+            (available_encodings - accept_encoding.map(&:first))
+              .each { |m2| list << [m2, q] }
           else
-            [[m, q]]
+            list << [m, q]
           end
-        }.inject([]) { |mem, list|
-          mem + list
-        }
+        end
 
-      encoding_candidates = expanded_accept_encoding.sort_by { |_, q| -q }.map { |m, _| m }
+      encoding_candidates = expanded_accept_encoding.sort_by { |_, q| -q }.map!(&:first)
 
       unless encoding_candidates.include?("identity")
         encoding_candidates.push("identity")
       end
 
-      expanded_accept_encoding.each { |m, q|
+      expanded_accept_encoding.each do |m, q|
         encoding_candidates.delete(m) if q == 0.0
-      }
+      end
 
-      return (encoding_candidates & available_encodings)[0]
+      (encoding_candidates & available_encodings)[0]
     end
     module_function :select_best_encoding