summaryrefslogtreecommitdiff
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