brauser 3.3.2 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.rubocop.yml +6 -0
- data/.travis-gemfile +4 -5
- data/.travis.yml +2 -2
- data/CHANGELOG.md +4 -0
- data/Gemfile +7 -8
- data/README.md +31 -95
- data/Rakefile +0 -1
- data/brauser.gemspec +4 -4
- data/default_definitions/browsers.rb +50 -0
- data/default_definitions/languages.rb +118 -0
- data/default_definitions/platforms.rb +24 -0
- data/doc/Brauser.html +6 -6
- data/doc/Brauser/Browser.html +3867 -580
- data/doc/Brauser/Definitions.html +537 -0
- data/doc/Brauser/Definitions/Base.html +342 -0
- data/doc/Brauser/Definitions/Browser.html +1047 -0
- data/doc/Brauser/Definitions/Language.html +496 -0
- data/doc/Brauser/Definitions/Platform.html +686 -0
- data/doc/Brauser/Hooks.html +2 -2
- data/doc/Brauser/Hooks/RubyOnRails.html +9 -9
- data/doc/Brauser/Parser.html +513 -0
- data/doc/Brauser/Value.html +601 -0
- data/doc/Brauser/Version.html +5 -5
- data/doc/_index.html +25 -108
- data/doc/class_list.html +1 -1
- data/doc/file.README.html +33 -97
- data/doc/index.html +33 -97
- data/doc/method_list.html +72 -120
- data/doc/top-level-namespace.html +2 -2
- data/lib/brauser.rb +13 -15
- data/lib/brauser/browser.rb +195 -66
- data/lib/brauser/definitions/base.rb +71 -0
- data/lib/brauser/definitions/browser.rb +80 -0
- data/lib/brauser/definitions/language.rb +29 -0
- data/lib/brauser/definitions/platform.rb +42 -0
- data/lib/brauser/hooks.rb +1 -2
- data/lib/brauser/parser.rb +47 -0
- data/lib/brauser/value.rb +39 -0
- data/lib/brauser/version.rb +3 -4
- data/spec/brauser/browser_spec.rb +73 -564
- data/spec/brauser/default_definitions_spec.rb +129 -0
- data/spec/brauser/definitions/base_spec.rb +48 -0
- data/spec/brauser/definitions/browser_spec.rb +47 -0
- data/spec/brauser/definitions/language_spec.rb +18 -0
- data/spec/brauser/definitions/platform_spec.rb +36 -0
- data/spec/brauser/hooks_spec.rb +5 -6
- data/spec/brauser/parser_spec.rb +31 -0
- data/spec/brauser/value_spec.rb +34 -0
- data/spec/coverage_helper.rb +0 -1
- data/spec/spec_helper.rb +0 -1
- metadata +50 -23
- data/lib/brauser/browseable/attributes.rb +0 -95
- data/lib/brauser/browseable/general.rb +0 -104
- data/lib/brauser/browseable/parsing.rb +0 -127
- data/lib/brauser/browseable/partial_querying.rb +0 -116
- data/lib/brauser/browseable/querying.rb +0 -63
- data/lib/brauser/browseable/register.rb +0 -73
- data/lib/brauser/definition.rb +0 -80
- data/lib/brauser/definitions/browsers.rb +0 -68
- data/lib/brauser/definitions/languages.rb +0 -130
- data/lib/brauser/definitions/platforms.rb +0 -30
- data/lib/brauser/query.rb +0 -36
- data/lib/brauser/queryable/chainers.rb +0 -56
- data/lib/brauser/queryable/queries.rb +0 -60
- data/spec/brauser/definition_spec.rb +0 -39
- data/spec/brauser/query_spec.rb +0 -111
@@ -0,0 +1,129 @@
|
|
1
|
+
#
|
2
|
+
# This file is part of the brauser gem. Copyright (C) 2013 and above Shogun <shogun@cowtech.it>.
|
3
|
+
# Licensed under the MIT license, which can be found at http://www.opensource.org/licenses/mit-license.php.
|
4
|
+
#
|
5
|
+
|
6
|
+
require "spec_helper"
|
7
|
+
|
8
|
+
describe Brauser do
|
9
|
+
describe "should recognize common browsers" do
|
10
|
+
def recognize(agent = nil)
|
11
|
+
browser = ::Brauser::Browser.new(agent)
|
12
|
+
[browser.name, browser.version, browser.platform]
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should return false for unknown names" do
|
16
|
+
expect(recognize("UNKNOWN")).to eq([:unknown, "0.0", :unknown])
|
17
|
+
end
|
18
|
+
|
19
|
+
it "by detecting the correct name, version and platform" do
|
20
|
+
# Google Chrome
|
21
|
+
expect(recognize("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_0) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.82 Safari/537.1")).to eq([:chrome, "21.0.1180.82", :osx])
|
22
|
+
expect(recognize("Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.9 Safari/536.5")).to eq([:chrome, "19.0.1084.9", :linux])
|
23
|
+
expect(recognize("Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.215 Safari/535.1")).to eq([:chrome, "13.0.782.215", :windows])
|
24
|
+
|
25
|
+
# Mozilla Firefox
|
26
|
+
expect(recognize("Mozilla/5.0 (Windows NT 6.1; rv:15.0) Gecko/20120716 Firefox/15.0a2")).to eq([:firefox, "15.0a2", :windows])
|
27
|
+
expect(recognize("Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:14.0) Gecko/20100101 Firefox/14.0.1")).to eq([:firefox, "14.0.1", :linux])
|
28
|
+
expect(recognize("Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0b8) Gecko/20100101 Firefox/4.0b8")).to eq([:firefox, "4.0b8", :osx])
|
29
|
+
|
30
|
+
# Apple Safari
|
31
|
+
expect(recognize("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/534.55.3 (KHTML, like Gecko) Version/5.1.3 Safari/534.53.10")).to eq([:safari, "5.1.3", :osx])
|
32
|
+
expect(recognize("Mozilla/5.0 (Windows; U; Windows NT 5.0; en-en) AppleWebKit/533.16 (KHTML, like Gecko) Version/4.1 Safari/533.16")).to eq([:safari, "4.1", :windows])
|
33
|
+
|
34
|
+
# Opera Mobile
|
35
|
+
expect(recognize("Opera/9.80 (Android 2.3.3; Linux; Opera Mobi/ADR-1111101157; U; es-ES) Presto/2.9.201 Version/11.50")).to eq([:opera_mobile, "11.50", :android])
|
36
|
+
expect(recognize("Mozilla/5.0 (S60; SymbOS; Opera Mobi/SYB-1103211396; U; es-LA; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6 Opera 11.00")).to eq([:opera_mobile, "11.00", :symbian])
|
37
|
+
|
38
|
+
# Opera
|
39
|
+
expect(recognize("Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.57 Safari/537.36 OPR/16.0.1196.73")).to eq([:opera, "16.0.1196.73", :windows])
|
40
|
+
expect(recognize("Opera/9.80 (Windows NT 6.1; U; es-ES) Presto/2.9.181 Version/12.00")).to eq([:opera, "12.00", :windows])
|
41
|
+
expect(recognize("Mozilla/5.0 (Windows NT 5.1; U; en; rv:1.8.1) Gecko/20061208 Firefox/5.0 Opera 11.11")).to eq([:opera, "11.11", :windows])
|
42
|
+
expect(recognize("Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; fr) Presto/2.9.168 Version/11.52")).to eq([:opera, "11.52", :osx])
|
43
|
+
expect(recognize("Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; de) Opera 11.51")).to eq([:opera, "11.51", :windows])
|
44
|
+
|
45
|
+
# Microsoft Internet Explorer in compatibility view
|
46
|
+
expect(recognize("Mozilla/5.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/6.0)")).to eq([:msie_compatibility, "10.0", :windows])
|
47
|
+
expect(recognize("Mozilla/5.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET CLR 1.1.4322; .NET4.0C; Tablet PC 2.0)")).to eq([:msie_compatibility, "9.0", :windows])
|
48
|
+
expect(recognize("Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; Zune 3.0)")).to eq([:msie_compatibility, "8.0", :windows])
|
49
|
+
|
50
|
+
# Microsoft Internet Explorer
|
51
|
+
expect(recognize("Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko")).to eq([:msie, "11.0", :windows])
|
52
|
+
expect(recognize("Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64;0)")).to eq([:msie, "10.0", :windows])
|
53
|
+
expect(recognize("Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET CLR 1.1.4322; .NET4.0C; Tablet PC 2.0)")).to eq([:msie, "9.0", :windows])
|
54
|
+
expect(recognize("Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; Zune 3.0)")).to eq([:msie, "8.0", :windows])
|
55
|
+
expect(recognize("Mozilla/5.0 (compatible; MSIE 7.0; Windows NT 6.0; fr-FR)")).to eq([:msie, "7.0", :windows])
|
56
|
+
expect(recognize("Mozilla/4.01 (compatible; MSIE 6.0; Windows NT 5.1)")).to eq([:msie, "6.0", :windows])
|
57
|
+
|
58
|
+
# Netscape
|
59
|
+
expect(recognize("Mozilla/5.0 (Windows; U; Win 9x 4.90; SG; rv:1.9.2.4) Gecko/20101104 Netscape/9.1.0285")).to eq([:netscape, "9.1.0285", :windows])
|
60
|
+
expect(recognize("Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-US; rv:1.8.1.8pre) Gecko/20071001 Firefox/2.0.0.7 Navigator/9.0RC1")).to eq([:netscape, "9.0RC1", :osx])
|
61
|
+
|
62
|
+
# Chrome IOS
|
63
|
+
expect(recognize("Mozilla/5.0 (iPhone; U; CPU iPhone OS 5_1_1 like Mac OS X; en-gb) AppleWebKit/534.46.0 (KHTML, like Gecko) CriOS/19.0.1084.60 Mobile/9B206 Safari/7534.48.3")).to eq([:chrome_ios, "19.0.1084.60", :ios])
|
64
|
+
expect(recognize("Mozilla/5.0 (iPad; U; CPU iPhone OS 5_1_1 like Mac OS X; en-gb) AppleWebKit/534.46.0 (KHTML, like Gecko) CriOS/21.0.1180.82 Safari/536.5")).to eq([:chrome_ios, "21.0.1180.82", :ios])
|
65
|
+
|
66
|
+
# Apple iPhone
|
67
|
+
expect(recognize("Mozilla/5.0 (iPhone; U; fr; CPU iPhone OS 4_2_1 like Mac OS X; fr) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148a Safari/6533.18.5")).to eq([:iphone, "5.0.2", :ios])
|
68
|
+
expect(recognize("Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_1 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8B5097d Safari/6531.22.7")).to eq([:iphone, "4.0.5", :ios])
|
69
|
+
|
70
|
+
# Apple iPad
|
71
|
+
expect(recognize("Mozilla/5.0 (iPad; CPU OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko ) Version/5.1 Mobile/9B176 Safari/7534.48.3")).to eq([:ipad, "5.1", :ios])
|
72
|
+
expect(recognize("Mozilla/5.0 (iPad; U; CPU OS 4_3 like Mac OS X; nl-nl) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8F190 Safari/6533.18.5")).to eq([:ipad, "5.0.2", :ios])
|
73
|
+
|
74
|
+
# Apple iPod Touch
|
75
|
+
expect(recognize("Mozilla/5.0 (iPod; U; CPU iPhone OS 4_3_3 like Mac OS X; ja-jp) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5")).to eq([:ipod, "5.0.2", :ios])
|
76
|
+
expect(recognize("Mozilla/5.0 (iPod; U; CPU iPhone OS 3_0 like Mac OS X; ja-jp) AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0 Mobile/7A341 Safari/528.16")).to eq([:ipod, "4.0", :ios])
|
77
|
+
|
78
|
+
# Android
|
79
|
+
expect(recognize("Mozilla/5.0 (Linux; U; Android 4.0.3; ko-kr; LG-L160L Build/IML74K) AppleWebkit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30")).to eq([:android, "4.0.3", :android])
|
80
|
+
expect(recognize("Mozilla/5.0 (Linux; U; Android 2.3.3; en-us; HTC_DesireS_S510e Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1")).to eq([:android, "2.3.3", :android])
|
81
|
+
|
82
|
+
# RIM Blackberry
|
83
|
+
expect(recognize("Mozilla/5.0 (BlackBerry; U; BlackBerry 9900; en) AppleWebKit/534.11+ (KHTML, like Gecko) Version/7.1.0.346 Mobile Safari/534.11+")).to eq([:blackberry, "7.1.0.346", :blackberry])
|
84
|
+
expect(recognize("Mozilla/5.0 (BlackBerry; U; BlackBerry 9700; pt) AppleWebKit/534.8+ (KHTML, like Gecko) Version/6.0.0.546 Mobile Safari/534.8+")).to eq([:blackberry, "6.0.0.546", :blackberry])
|
85
|
+
|
86
|
+
# Windows Phone
|
87
|
+
expect(recognize("Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; SAMSUNG; SGH-i917)")).to eq([:windows_phone, "9.0", :windows_phone])
|
88
|
+
expect(recognize("Mozilla/4.0 (compatible; MSIE 7.0; Windows Phone OS 7.0; Trident/3.1; IEMobile/7.0; DELL; Venue Pro")).to eq([:windows_phone, "7.0", :windows_phone])
|
89
|
+
|
90
|
+
# Symbian
|
91
|
+
expect(recognize("Mozilla/5.0 (SymbianOS/9.4; Series60/5.0 NokiaC6-00/20.0.042; Profile/MIDP-2.1 Configuration/CLDC-1.1; zh-hk) AppleWebKit/525 (KHTML, like Gecko) BrowserNG/7.2.6.9 3gpp-gba")).to eq([:mobile, "7.2.6.9", :symbian])
|
92
|
+
|
93
|
+
# Amazon Kindle
|
94
|
+
expect(recognize("Mozilla/4.0 (compatible; Linux 2.6.22) NetFront/3.4 Kindle/2.0 (screen 600x800)")).to eq([:kindle, "2.0", :kindle])
|
95
|
+
expect(recognize("Mozilla/4.0 (compatible; Linux 2.6.10) NetFront/3.3 Kindle/1.0 (screen 600x800)")).to eq([:kindle, "1.0", :kindle])
|
96
|
+
|
97
|
+
# Sony Playstation Portable
|
98
|
+
expect(recognize("PSP (PlayStation Portable); 2.00")).to eq([:psp, "2.00", :psp])
|
99
|
+
expect(recognize("Mozilla/4.0 (PSP (PlayStation Portable); 2.00)")).to eq([:psp, "2.00", :psp])
|
100
|
+
|
101
|
+
# Sony Playstation 3
|
102
|
+
expect(recognize("Mozilla/5.0 (PLAYSTATION 3; 3.55)")).to eq([:ps3, "3.55", :ps3])
|
103
|
+
expect(recognize("Mozilla/5.0 (PLAYSTATION 3; 1.70)")).to eq([:ps3, "1.70", :ps3])
|
104
|
+
|
105
|
+
# Nintendo Wii
|
106
|
+
expect(recognize("Opera/9.30 (Nintendo Wii; U; ; 2071; Wii Shop Channel/1.0; en)")).to eq([:opera, "2071", :wii])
|
107
|
+
expect(recognize("Opera/9.30 (Nintendo Wii; U; ; 2047-7;pt-br)")).to eq([:opera, "2047", :wii])
|
108
|
+
|
109
|
+
# Mobile browsers
|
110
|
+
expect(recognize("Mozilla/4.0 (compatible; MSIE 4.01; Windows CE; Sprint;PPC-i830; PPC; 240x320)")).to eq([:mobile, "4.0", :windows])
|
111
|
+
|
112
|
+
# Generic Webkit
|
113
|
+
expect(recognize("Midori/0.2.0 (X11; Linux i686; U; de-de) WebKit/531.2+")).to eq([:webkit, "531.2", :linux])
|
114
|
+
expect(recognize("Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_2; de-de) AppleWebKit/531.21.8 (KHTML, like Gecko) NetNewsWire/3.2.3")).to eq([:webkit, "531.21.8", :osx])
|
115
|
+
|
116
|
+
# Generic Gecko
|
117
|
+
expect(recognize("Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9a3.pre) Gecko/20070330")).to eq([:gecko, "1.9a3.pre", :linux])
|
118
|
+
expect(recognize("Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.9.2a1pre) Gecko")).to eq([:gecko, "1.9.2a1pre", :windows])
|
119
|
+
|
120
|
+
# QuickTime
|
121
|
+
expect(recognize("QuickTime/7.6.2 (qtver=7.6.2;os=Windows NT 5.1Service Pack 3)")).to eq([:quicktime, "7.6.2", :windows])
|
122
|
+
expect(recognize("QuickTime/7.6 (qtver=7.6;cpu=IA32;os=Mac 10,5,7)")).to eq([:quicktime, "7.6", :osx])
|
123
|
+
|
124
|
+
# CoreMedia
|
125
|
+
expect(recognize("Apple iPhone v1.1.1 CoreMedia v1.0.0.3A110a")).to eq([:coremedia, "1.0.0.3A110a", :ios])
|
126
|
+
expect(recognize("Apple Mac OS X v10.6.6 CoreMedia v1.0.0.10J567")).to eq([:coremedia, "1.0.0.10J567", :osx])
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
#
|
2
|
+
# This file is part of the brauser gem. Copyright (C) 2013 and above Shogun <shogun@cowtech.it>.
|
3
|
+
# Licensed under the MIT license, which can be found at http://www.opensource.org/licenses/mit-license.php.
|
4
|
+
#
|
5
|
+
|
6
|
+
require "spec_helper"
|
7
|
+
|
8
|
+
describe ::Brauser::Definitions do
|
9
|
+
describe ".register" do
|
10
|
+
it "should register a new definition" do
|
11
|
+
dummy = ::OpenStruct.new(id: :definition)
|
12
|
+
expect(::Brauser::Definitions::Browser).to receive(:new).with("A", "B", "C", a: 1, b: 2, c:3).and_return(dummy)
|
13
|
+
::Brauser::Definitions.register(:browser, "A", "B", "C", a: 1, b: 2, c:3)
|
14
|
+
expect(::Brauser::Definitions.browsers[:definition]).to be(dummy)
|
15
|
+
::Brauser::Definitions.browsers.delete(:definition)
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should raise an error for invalid types" do
|
19
|
+
expect { ::Brauser::Definitions.register(:none, "A", "B", "C", a: 1, b: 2, c:3) }.to raise_error(::ArgumentError)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
describe ".browsers" do
|
24
|
+
it "should return the list of browsers" do
|
25
|
+
expect(::Brauser::Definitions.browsers).to include(:chrome)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
describe ".platforms" do
|
30
|
+
it "should return the list of platforms" do
|
31
|
+
expect(::Brauser::Definitions.platforms).to include(:osx)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
describe ".languages" do
|
36
|
+
it "should return the list of languages" do
|
37
|
+
expect(::Brauser::Definitions.languages).to include(:it)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
describe ::Brauser::Definitions::Base do
|
43
|
+
describe "#match" do
|
44
|
+
it "should raise an error" do
|
45
|
+
expect { ::Brauser::Definitions::Base.new.match(:unused) }.to raise_error(::RuntimeError)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
#
|
2
|
+
# This file is part of the brauser gem. Copyright (C) 2013 and above Shogun <shogun@cowtech.it>.
|
3
|
+
# Licensed under the MIT license, which can be found at http://www.opensource.org/licenses/mit-license.php.
|
4
|
+
#
|
5
|
+
|
6
|
+
require "spec_helper"
|
7
|
+
|
8
|
+
describe Brauser::Definitions::Browser do
|
9
|
+
subject { ::Brauser::Definitions.browsers[:opera] }
|
10
|
+
|
11
|
+
describe "#initialize" do
|
12
|
+
it "should save the id, the name and the pattern" do
|
13
|
+
subject = ::Brauser::Definitions::Browser.new(:browser, "BROWSER", /engine/, /version/)
|
14
|
+
expect(subject.id).to eq(:browser)
|
15
|
+
expect(subject.name).to eq("BROWSER")
|
16
|
+
expect(subject.engine_matcher).to eq(/engine/)
|
17
|
+
expect(subject.version_matcher).to eq(/version/)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
describe "#match" do
|
22
|
+
it "should run against the engine pattern and the version pattern" do
|
23
|
+
result = subject.match("Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; de) Opera 11.51")
|
24
|
+
expect(result.first).to eq(:opera)
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should also fetch the version" do
|
28
|
+
result = subject.match("Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; de) Opera 11.51")
|
29
|
+
expect(result[1]).to eq(::Versionomy.parse("11.51"))
|
30
|
+
|
31
|
+
result = subject.match("Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; de) Opera")
|
32
|
+
expect(result[1]).to eq(::Versionomy.parse("0.0"))
|
33
|
+
|
34
|
+
subject.instance_variable_set(:@version_matcher, ->(_) { "123" })
|
35
|
+
result = subject.match("Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; de) Opera")
|
36
|
+
expect(result[1]).to eq("123")
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should also fetch the platform" do
|
40
|
+
result = subject.match("Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; de) Opera 11.51")
|
41
|
+
expect(result[2]).to eq(:windows)
|
42
|
+
|
43
|
+
result = subject.match("Mozilla/5.0 (compatible; MSIE 9.0; FOO 6.1; de) Opera 11.51")
|
44
|
+
expect(result[2]).to eq(nil)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
#
|
2
|
+
# This file is part of the brauser gem. Copyright (C) 2013 and above Shogun <shogun@cowtech.it>.
|
3
|
+
# Licensed under the MIT license, which can be found at http://www.opensource.org/licenses/mit-license.php.
|
4
|
+
#
|
5
|
+
|
6
|
+
require "spec_helper"
|
7
|
+
|
8
|
+
describe Brauser::Definitions::Language do
|
9
|
+
subject { ::Brauser::Definitions::Language.new("it_CH", "Italian/ Switzerland") }
|
10
|
+
|
11
|
+
describe "#initialize" do
|
12
|
+
it "should save the code as id and code, and also save the name" do
|
13
|
+
expect(subject.id).to eq(:"it-ch")
|
14
|
+
expect(subject.code).to eq("it-ch")
|
15
|
+
expect(subject.name).to eq("Italian/ Switzerland")
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
#
|
2
|
+
# This file is part of the brauser gem. Copyright (C) 2013 and above Shogun <shogun@cowtech.it>.
|
3
|
+
# Licensed under the MIT license, which can be found at http://www.opensource.org/licenses/mit-license.php.
|
4
|
+
#
|
5
|
+
|
6
|
+
require "spec_helper"
|
7
|
+
|
8
|
+
describe Brauser::Definitions::Platform do
|
9
|
+
subject { ::Brauser::Definitions::Platform.new(:platform, "PLATFORM", /platform/) }
|
10
|
+
|
11
|
+
describe "#initialize" do
|
12
|
+
it "should save the id, the name and the pattern" do
|
13
|
+
expect(subject.id).to eq(:platform)
|
14
|
+
expect(subject.name).to eq("PLATFORM")
|
15
|
+
expect(subject.matcher).to eq(/platform/)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
describe "#match" do
|
20
|
+
it "should run against the pattern and return its result" do
|
21
|
+
result = subject.match("This is the platform", "ENGINE")
|
22
|
+
expect(result).to be_a(::MatchData)
|
23
|
+
|
24
|
+
result = subject.match("This is invalid", "ENGINE")
|
25
|
+
expect(result).to be_nil
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should run against the given block" do
|
29
|
+
result = ::Brauser::Definitions::Platform.new(:platform, "PLATFORM", ->(header, engine) { "#{header}-#{engine}" }).match("HEADER", "ENGINE")
|
30
|
+
expect(result).to eq("HEADER-ENGINE")
|
31
|
+
|
32
|
+
result = (::Brauser::Definitions::Platform.new(:platform, "PLATFORM"){ |header| header.reverse }).match("HEADER", "ENGINE")
|
33
|
+
expect(result).to eq("REDAEH")
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
data/spec/brauser/hooks_spec.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
# encoding: utf-8
|
2
1
|
#
|
3
2
|
# This file is part of the brauser gem. Copyright (C) 2013 and above Shogun <shogun@cowtech.it>.
|
4
3
|
# Licensed under the MIT license, which can be found at http://www.opensource.org/licenses/mit-license.php.
|
@@ -8,16 +7,16 @@ require "spec_helper"
|
|
8
7
|
|
9
8
|
describe Brauser::Hooks::RubyOnRails do
|
10
9
|
before(:each) do
|
11
|
-
stub_const("ActionController::Base", Class.new)
|
12
|
-
allow(ActionController::Base).to receive(:helper_method)
|
13
|
-
allow_any_instance_of(ActionController::Base).to receive(:request).and_return(OpenStruct.new(headers: {}))
|
14
|
-
ActionController::Base.send(:include, Brauser::Hooks::RubyOnRails)
|
10
|
+
stub_const("ActionController::Base", ::Class.new)
|
11
|
+
allow(::ActionController::Base).to receive(:helper_method)
|
12
|
+
allow_any_instance_of(::ActionController::Base).to receive(:request).and_return(::OpenStruct.new(headers: {}))
|
13
|
+
::ActionController::Base.send(:include, ::Brauser::Hooks::RubyOnRails)
|
15
14
|
end
|
16
15
|
|
17
16
|
let(:controller){::ActionController::Base.new}
|
18
17
|
|
19
18
|
it "should append to ActionController::Base" do
|
20
|
-
expect(controller.respond_to?(:browser)).to
|
19
|
+
expect(controller.respond_to?(:browser)).to be_truthy
|
21
20
|
end
|
22
21
|
|
23
22
|
it "should memoize browser" do
|
@@ -0,0 +1,31 @@
|
|
1
|
+
#
|
2
|
+
# This file is part of the brauser gem. Copyright (C) 2013 and above Shogun <shogun@cowtech.it>.
|
3
|
+
# Licensed under the MIT license, which can be found at http://www.opensource.org/licenses/mit-license.php.
|
4
|
+
#
|
5
|
+
|
6
|
+
require "spec_helper"
|
7
|
+
|
8
|
+
describe Brauser::Parser do
|
9
|
+
subject { ::Brauser::Parser.new }
|
10
|
+
|
11
|
+
describe ".disambiguate" do
|
12
|
+
it "should check if a string matches a pattern and NOT another one" do
|
13
|
+
expect(::Brauser::Parser.disambiguate("test", /es/, /az/)).to be_truthy
|
14
|
+
expect(::Brauser::Parser.disambiguate("test", /es/, /st/)).to be_falsey
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe "#parse_agent" do
|
19
|
+
it "should parse Agent header and return a id, version and platform" do
|
20
|
+
expect(subject.parse_agent("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_0) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.82 Safari/537.1")).to eq([:chrome, Versionomy.parse("21.0.1180.82"), :osx])
|
21
|
+
expect(subject.parse_agent("Mozilla/5.0 (Windows NT 6.1; rv:15.0) Gecko/20120716 Firefox/15.0a2")).to eq([:firefox, Versionomy.parse("15.0a2"), :windows])
|
22
|
+
expect(subject.parse_agent("UNKNOWN")).to be_nil
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
describe "#parse_accept_language" do
|
27
|
+
it "should parse Accept-Language and return an hash of languages with their priorities" do
|
28
|
+
expect(subject.parse_accept_language("IT;q=0.7, EN;q=0.3")).to eq({it: 0.7, en: 0.3})
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
#
|
2
|
+
# This file is part of the brauser gem. Copyright (C) 2013 and above Shogun <shogun@cowtech.it>.
|
3
|
+
# Licensed under the MIT license, which can be found at http://www.opensource.org/licenses/mit-license.php.
|
4
|
+
#
|
5
|
+
|
6
|
+
require "spec_helper"
|
7
|
+
|
8
|
+
describe Brauser::Value do
|
9
|
+
subject { ::Brauser::Value.new(1) }
|
10
|
+
|
11
|
+
describe "#initialize" do
|
12
|
+
it "should save the value" do
|
13
|
+
expect(subject.value).to eq(1)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
describe "#==" do
|
18
|
+
it "should compare against a value or an array of value" do
|
19
|
+
expect(subject).to eq(1)
|
20
|
+
expect(subject).not_to eq(2)
|
21
|
+
expect(subject).to eq([1, 2])
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe "it should delegate the rest to the value" do
|
26
|
+
it "- #to_s" do
|
27
|
+
expect(subject.to_s).to eq("1")
|
28
|
+
end
|
29
|
+
|
30
|
+
it "- #method_missing" do
|
31
|
+
expect(subject.odd?).to be_truthy
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
data/spec/coverage_helper.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: brauser
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 4.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Shogun
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-09-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: lazier
|
@@ -16,14 +16,28 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: '4.0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: '4.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: versionomy
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0.4'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0.4'
|
27
41
|
description: A framework agnostic browser detection and querying helper.
|
28
42
|
email:
|
29
43
|
- shogun@cowtech.it
|
@@ -41,6 +55,9 @@ files:
|
|
41
55
|
- README.md
|
42
56
|
- Rakefile
|
43
57
|
- brauser.gemspec
|
58
|
+
- default_definitions/browsers.rb
|
59
|
+
- default_definitions/languages.rb
|
60
|
+
- default_definitions/platforms.rb
|
44
61
|
- doc/Brauser.html
|
45
62
|
- doc/Brauser/Browseable.html
|
46
63
|
- doc/Brauser/Browseable/Attributes.html
|
@@ -54,12 +71,19 @@ files:
|
|
54
71
|
- doc/Brauser/Browseable/Register/ClassMethods.html
|
55
72
|
- doc/Brauser/Browser.html
|
56
73
|
- doc/Brauser/Definition.html
|
74
|
+
- doc/Brauser/Definitions.html
|
75
|
+
- doc/Brauser/Definitions/Base.html
|
76
|
+
- doc/Brauser/Definitions/Browser.html
|
77
|
+
- doc/Brauser/Definitions/Language.html
|
78
|
+
- doc/Brauser/Definitions/Platform.html
|
57
79
|
- doc/Brauser/Hooks.html
|
58
80
|
- doc/Brauser/Hooks/RubyOnRails.html
|
81
|
+
- doc/Brauser/Parser.html
|
59
82
|
- doc/Brauser/Query.html
|
60
83
|
- doc/Brauser/Queryable.html
|
61
84
|
- doc/Brauser/Queryable/Chainers.html
|
62
85
|
- doc/Brauser/Queryable/Queries.html
|
86
|
+
- doc/Brauser/Value.html
|
63
87
|
- doc/Brauser/Version.html
|
64
88
|
- doc/_index.html
|
65
89
|
- doc/class_list.html
|
@@ -76,30 +100,28 @@ files:
|
|
76
100
|
- doc/method_list.html
|
77
101
|
- doc/top-level-namespace.html
|
78
102
|
- lib/brauser.rb
|
79
|
-
- lib/brauser/browseable/attributes.rb
|
80
|
-
- lib/brauser/browseable/general.rb
|
81
|
-
- lib/brauser/browseable/parsing.rb
|
82
|
-
- lib/brauser/browseable/partial_querying.rb
|
83
|
-
- lib/brauser/browseable/querying.rb
|
84
|
-
- lib/brauser/browseable/register.rb
|
85
103
|
- lib/brauser/browser.rb
|
86
|
-
- lib/brauser/
|
87
|
-
- lib/brauser/definitions/
|
88
|
-
- lib/brauser/definitions/
|
89
|
-
- lib/brauser/definitions/
|
104
|
+
- lib/brauser/definitions/base.rb
|
105
|
+
- lib/brauser/definitions/browser.rb
|
106
|
+
- lib/brauser/definitions/language.rb
|
107
|
+
- lib/brauser/definitions/platform.rb
|
90
108
|
- lib/brauser/hooks.rb
|
91
|
-
- lib/brauser/
|
92
|
-
- lib/brauser/
|
93
|
-
- lib/brauser/queryable/queries.rb
|
109
|
+
- lib/brauser/parser.rb
|
110
|
+
- lib/brauser/value.rb
|
94
111
|
- lib/brauser/version.rb
|
95
112
|
- spec/brauser/browser_spec.rb
|
96
|
-
- spec/brauser/
|
113
|
+
- spec/brauser/default_definitions_spec.rb
|
114
|
+
- spec/brauser/definitions/base_spec.rb
|
115
|
+
- spec/brauser/definitions/browser_spec.rb
|
116
|
+
- spec/brauser/definitions/language_spec.rb
|
117
|
+
- spec/brauser/definitions/platform_spec.rb
|
97
118
|
- spec/brauser/hooks_spec.rb
|
98
|
-
- spec/brauser/
|
119
|
+
- spec/brauser/parser_spec.rb
|
120
|
+
- spec/brauser/value_spec.rb
|
99
121
|
- spec/coverage_helper.rb
|
100
122
|
- spec/spec_helper.rb
|
101
123
|
- spec/supported.yml
|
102
|
-
homepage: http://sw.
|
124
|
+
homepage: http://sw.cowtech.it/brauser
|
103
125
|
licenses:
|
104
126
|
- MIT
|
105
127
|
metadata: {}
|
@@ -111,7 +133,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
111
133
|
requirements:
|
112
134
|
- - ">="
|
113
135
|
- !ruby/object:Gem::Version
|
114
|
-
version: 1.
|
136
|
+
version: 2.1.0
|
115
137
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
116
138
|
requirements:
|
117
139
|
- - ">="
|
@@ -125,9 +147,14 @@ specification_version: 4
|
|
125
147
|
summary: A framework agnostic browser detection and querying helper.
|
126
148
|
test_files:
|
127
149
|
- spec/brauser/browser_spec.rb
|
128
|
-
- spec/brauser/
|
150
|
+
- spec/brauser/default_definitions_spec.rb
|
151
|
+
- spec/brauser/definitions/base_spec.rb
|
152
|
+
- spec/brauser/definitions/browser_spec.rb
|
153
|
+
- spec/brauser/definitions/language_spec.rb
|
154
|
+
- spec/brauser/definitions/platform_spec.rb
|
129
155
|
- spec/brauser/hooks_spec.rb
|
130
|
-
- spec/brauser/
|
156
|
+
- spec/brauser/parser_spec.rb
|
157
|
+
- spec/brauser/value_spec.rb
|
131
158
|
- spec/coverage_helper.rb
|
132
159
|
- spec/spec_helper.rb
|
133
160
|
- spec/supported.yml
|