Skip to content

Commit 79a5ff8

Browse files
committed
Merge branch 'patch/header-testing'
2 parents c133ad3 + ca6f882 commit 79a5ff8

File tree

2 files changed

+44
-1
lines changed

2 files changed

+44
-1
lines changed

lib/browserino/definitions/missing_props.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
prop_missing :locales do |http_headers|
1414
http_headers[:accept_language]
1515
.to_s.scan(/(\w{2}(?:[_\-]\w{2})?)(?:;q=([\d.]+))?/i)
16-
.map { |(locale, quality)| [locale, (quality || 1).to_i] }
16+
.map { |(locale, quality)| [locale, (quality || 1).to_f] }
1717
.sort_by { |a| -a[1] }
1818
.map(&:first)
1919
end

spec/missing_props_spec.rb

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
require 'spec_helper'
2+
3+
describe 'Browserino' do
4+
describe 'http header fallback' do
5+
it 'normalizes raw header names' do
6+
plain_headers = Browserino.normalize_header_keys({'Accept-Language' => 'en-US,en;q=0.9,nl-NL;q=0.8,nl;q=0.7'})
7+
8+
expect(plain_headers.key?(:accept_language)).to be_truthy
9+
end
10+
11+
it 'normalizes Rails header names' do
12+
rails_headers = Browserino.normalize_header_keys({'HTTP_ACCEPT_LANGUAGE' => 'en-US,en;q=0.9,nl-NL;q=0.8,nl;q=0.7'})
13+
14+
expect(rails_headers.key?(:accept_language)).to be_truthy
15+
end
16+
17+
it 'sorts HTTP_ACCEPT_LANGUAGE locales by quality' do
18+
client = Browserino.parse(
19+
'Mozilla/5.0 (Linux; Android 5.1; ZTE Blade L6 Build/LMY47I) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.91 Mobile Safari/537.36',
20+
{'HTTP_ACCEPT_LANGUAGE' => 'en-US,en;q=0.9,nl-NL;q=0.6,nl;q=0.7'}
21+
)
22+
23+
expect(client.locales).to eq %i[en_us en nl nl_nl]
24+
end
25+
26+
it 'can detect language from Accept-Language header when headers given' do
27+
client = Browserino.parse(
28+
'Mozilla/5.0 (Linux; Android 5.1; ZTE Blade L6 Build/LMY47I) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.91 Mobile Safari/537.36',
29+
{'HTTP_ACCEPT_LANGUAGE' => 'en-US,en;q=0.9,nl-NL;q=0.8,nl;q=0.7'}
30+
)
31+
32+
expect(client.locale).to eq :en_us
33+
expect(client.locales).to eq %i[en_us en nl_nl nl]
34+
end
35+
36+
it 'cannot detect language from Accept-Language header when no headers given' do
37+
client = Browserino.parse 'Mozilla/5.0 (Linux; Android 5.1; ZTE Blade L6 Build/LMY47I) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.91 Mobile Safari/537.36'
38+
39+
expect(client.locale).to be_nil
40+
expect(client.locales).to eq %i[]
41+
end
42+
end
43+
end

0 commit comments

Comments
 (0)