From e06a25423979e0443e6252cbe0cb4b2b41fa89f0 Mon Sep 17 00:00:00 2001 From: Luca Guidi Date: Thu, 13 Feb 2014 11:15:26 +0100 Subject: Ensure Rack::Utils.best_q_match to respect requested content type --- lib/rack/utils.rb | 2 +- test/spec_utils.rb | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/rack/utils.rb b/lib/rack/utils.rb index 6c2bf907..eb443f59 100644 --- a/lib/rack/utils.rb +++ b/lib/rack/utils.rb @@ -185,7 +185,7 @@ module Rack values = q_values(q_value_header) values.map do |req_mime, quality| - match = available_mimes.first { |am| Rack::Mime.match?(am, req_mime) } + match = available_mimes.find { |am| Rack::Mime.match?(am, req_mime) } next unless match [match, quality] end.compact.sort_by do |match, quality| diff --git a/test/spec_utils.rb b/test/spec_utils.rb index c3867965..b79ae1df 100644 --- a/test/spec_utils.rb +++ b/test/spec_utils.rb @@ -300,6 +300,9 @@ describe Rack::Utils do # Higher quality matches are preferred Rack::Utils.best_q_match("text/*;q=0.5,text/plain;q=1.0", %w[text/plain text/html]).should.equal "text/plain" + # Respect requested content type + Rack::Utils.best_q_match("application/json", %w[application/vnd.lotus-1-2-3 application/json]).should.equal "application/json" + # All else equal, the available mimes are preferred in order Rack::Utils.best_q_match("text/*", %w[text/html text/plain]).should.equal "text/html" Rack::Utils.best_q_match("text/plain,text/html", %w[text/html text/plain]).should.equal "text/html" -- cgit v1.2.3-24-ge0c7