From b410944fe52a98f3d4db0124e0b950a12dace5b5 Mon Sep 17 00:00:00 2001 From: Geoffrey Hichborn Date: Thu, 23 Aug 2012 11:16:10 -0700 Subject: [PATCH] Strip all whitespace from Accept-Language header before parsing --- lib/http_accept_language/parser.rb | 4 ++-- spec/parser_spec.rb | 5 +++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/lib/http_accept_language/parser.rb b/lib/http_accept_language/parser.rb index b941735..89ea388 100644 --- a/lib/http_accept_language/parser.rb +++ b/lib/http_accept_language/parser.rb @@ -17,9 +17,9 @@ def initialize(header) # # => [ 'nl-NL', 'nl-BE', 'nl', 'en-US', 'en' ] # def user_preferred_languages - @user_preferred_languages ||= header.split(/\s*,\s*/).collect do |l| + @user_preferred_languages ||= header.gsub(/\s+/, '').split(/,/).collect do |l| l += ';q=1.0' unless l =~ /;q=\d+\.\d+$/ - l.split(';q=') + l.split(/;q=/) end.sort do |x,y| raise "Not correctly formatted" unless x.first =~ /^[a-z\-0-9]+$/i y.last.to_f <=> x.last.to_f diff --git a/spec/parser_spec.rb b/spec/parser_spec.rb index e092722..b797269 100644 --- a/spec/parser_spec.rb +++ b/spec/parser_spec.rb @@ -20,6 +20,11 @@ def parser parser.user_preferred_languages.should eq [] end + it "should properly respect whitespace" do + parser.header = 'en-us, en-gb; q=0.8,en;q = 0.6,es-419' + parser.user_preferred_languages.should eq %w{en-US es-419 en-GB en} + end + it "should find first available language" do parser.preferred_language_from(%w{en en-GB}).should eq "en-GB" end