diff options
author | Rafael França <rafaelmfranca@gmail.com> | 2019-06-27 19:23:29 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-06-27 19:23:29 -0400 |
commit | 5e08d39b323d37fd354f63bac0fc30047c528e35 (patch) | |
tree | ea6970e5768999b0f7bbf26345f6a8736a78d21d | |
parent | 06f7c997706c612d7f8332d66f01daa303bd7c6c (diff) | |
parent | 33af8f378f2d521e2db3cbecea0e500b53d9d4a5 (diff) | |
download | rack-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.rb | 19 |
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 |