browser2 1.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 +7 -0
- data/.gitignore +5 -0
- data/.hound.yml +90 -0
- data/.rubocop.yml +90 -0
- data/.travis.yml +14 -0
- data/CONTRIBUTING.md +44 -0
- data/Gemfile +2 -0
- data/LICENSE +20 -0
- data/README.md +125 -0
- data/Rakefile +33 -0
- data/browser2.gemspec +42 -0
- data/config.ru +2 -0
- data/data/bots.json +176 -0
- data/data/languages.json +115 -0
- data/gemfiles/rails3.gemfile +4 -0
- data/lib/browser/action_controller.rb +20 -0
- data/lib/browser/data/bots.rb +5 -0
- data/lib/browser/data/languages.rb +5 -0
- data/lib/browser/data/search_engines.rb +14 -0
- data/lib/browser/meta/base.rb +20 -0
- data/lib/browser/meta/generic_browser.rb +15 -0
- data/lib/browser/meta/id.rb +9 -0
- data/lib/browser/meta/ie.rb +18 -0
- data/lib/browser/meta/ios.rb +9 -0
- data/lib/browser/meta/mobile.rb +9 -0
- data/lib/browser/meta/modern.rb +9 -0
- data/lib/browser/meta/platform.rb +9 -0
- data/lib/browser/meta/safari.rb +9 -0
- data/lib/browser/meta/webkit.rb +9 -0
- data/lib/browser/methods/blackberry.rb +51 -0
- data/lib/browser/methods/bots.rb +37 -0
- data/lib/browser/methods/consoles.rb +43 -0
- data/lib/browser/methods/devices.rb +41 -0
- data/lib/browser/methods/ie.rb +104 -0
- data/lib/browser/methods/language.rb +16 -0
- data/lib/browser/methods/mobile.rb +30 -0
- data/lib/browser/methods/platform.rb +142 -0
- data/lib/browser/methods/tv.rb +8 -0
- data/lib/browser/middleware/context/additions.rb +16 -0
- data/lib/browser/middleware/context/url_methods.rb +13 -0
- data/lib/browser/middleware/context.rb +20 -0
- data/lib/browser/middleware.rb +66 -0
- data/lib/browser/rails.rb +14 -0
- data/lib/browser/version.rb +8 -0
- data/lib/browser.rb +255 -0
- data/test/benchmark_test.rb +83 -0
- data/test/browser_test.rb +248 -0
- data/test/middleware_test.rb +50 -0
- data/test/sample_app.rb +31 -0
- data/test/test_helper.rb +20 -0
- data/test/ua.yml +122 -0
- data/test/unit/adobe_air_test.rb +13 -0
- data/test/unit/android_test.rb +93 -0
- data/test/unit/blackberry_test.rb +104 -0
- data/test/unit/bots_test.rb +116 -0
- data/test/unit/chrome_test.rb +56 -0
- data/test/unit/console_test.rb +67 -0
- data/test/unit/firefox_test.rb +37 -0
- data/test/unit/ie_test.rb +377 -0
- data/test/unit/ios_test.rb +139 -0
- data/test/unit/kindle_test.rb +37 -0
- data/test/unit/opera_test.rb +42 -0
- data/test/unit/windows_phone_test.rb +50 -0
- data/test/unit/windows_test.rb +60 -0
- metadata +240 -0
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
require "test_helper"
|
|
2
|
+
|
|
3
|
+
class BlackberryTest < Minitest::Test
|
|
4
|
+
test "detects blackberry" do
|
|
5
|
+
@browser = Browser.new ua: $ua["BLACKBERRY"]
|
|
6
|
+
|
|
7
|
+
assert_equal "BlackBerry", @browser.name
|
|
8
|
+
assert @browser.blackberry?
|
|
9
|
+
refute @browser.tablet?
|
|
10
|
+
assert @browser.mobile?
|
|
11
|
+
refute @browser.modern?
|
|
12
|
+
assert_equal "4.1.0", @browser.full_version
|
|
13
|
+
assert_equal "4", @browser.version
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
test "detects blackberry4" do
|
|
17
|
+
@browser = Browser.new ua: $ua["BLACKBERRY4"]
|
|
18
|
+
|
|
19
|
+
assert_equal "BlackBerry", @browser.name
|
|
20
|
+
assert_equal "4", @browser.blackberry_version
|
|
21
|
+
assert @browser.blackberry?(4)
|
|
22
|
+
refute @browser.tablet?
|
|
23
|
+
assert @browser.mobile?
|
|
24
|
+
refute @browser.modern?
|
|
25
|
+
assert_equal "4.2.1", @browser.full_version
|
|
26
|
+
assert_equal "4", @browser.version
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
test "detects blackberry5" do
|
|
30
|
+
@browser = Browser.new ua: $ua["BLACKBERRY5"]
|
|
31
|
+
|
|
32
|
+
assert_equal "BlackBerry", @browser.name
|
|
33
|
+
assert @browser.blackberry?(5)
|
|
34
|
+
assert_equal "5", @browser.blackberry_version
|
|
35
|
+
refute @browser.tablet?
|
|
36
|
+
assert @browser.mobile?
|
|
37
|
+
refute @browser.modern?
|
|
38
|
+
assert_equal "5.0.0.93", @browser.full_version
|
|
39
|
+
assert_equal "5", @browser.version
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
test "detects blackberry6" do
|
|
43
|
+
@browser = Browser.new ua: $ua["BLACKBERRY6"]
|
|
44
|
+
|
|
45
|
+
assert_equal "Safari", @browser.name
|
|
46
|
+
assert @browser.blackberry?(6)
|
|
47
|
+
assert_equal "6", @browser.blackberry_version
|
|
48
|
+
refute @browser.tablet?
|
|
49
|
+
assert @browser.mobile?
|
|
50
|
+
assert @browser.modern?
|
|
51
|
+
assert_equal "534.11", @browser.full_version
|
|
52
|
+
assert_equal "534", @browser.version
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
test "detects blackberry7" do
|
|
56
|
+
@browser = Browser.new ua: $ua["BLACKBERRY7"]
|
|
57
|
+
|
|
58
|
+
assert_equal "Safari", @browser.name
|
|
59
|
+
assert @browser.blackberry?(7)
|
|
60
|
+
assert_equal "7", @browser.blackberry_version
|
|
61
|
+
refute @browser.tablet?
|
|
62
|
+
assert @browser.mobile?
|
|
63
|
+
assert @browser.modern?
|
|
64
|
+
assert_equal "534.11", @browser.full_version
|
|
65
|
+
assert_equal "534", @browser.version
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
test "detects blackberry10" do
|
|
69
|
+
@browser = Browser.new ua: $ua["BLACKBERRY10"]
|
|
70
|
+
|
|
71
|
+
assert_equal "Safari", @browser.name
|
|
72
|
+
assert_equal "10", @browser.blackberry_version
|
|
73
|
+
assert @browser.blackberry?(10)
|
|
74
|
+
refute @browser.tablet?
|
|
75
|
+
assert @browser.mobile?
|
|
76
|
+
assert @browser.modern?
|
|
77
|
+
assert_equal "10.0.9.1675", @browser.full_version
|
|
78
|
+
assert_equal "10", @browser.version
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
test "detects blackberry playbook tablet" do
|
|
82
|
+
@browser = Browser.new ua: $ua["PLAYBOOK"]
|
|
83
|
+
|
|
84
|
+
refute @browser.android?
|
|
85
|
+
assert @browser.tablet?
|
|
86
|
+
refute @browser.mobile?
|
|
87
|
+
|
|
88
|
+
assert_equal "7.2.1.0", @browser.full_version
|
|
89
|
+
assert_equal "7", @browser.version
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
test "warn about deprecated numbered version" do
|
|
93
|
+
@browser = Browser.new ua: $ua["BLACKBERRY10"]
|
|
94
|
+
|
|
95
|
+
message = "Browser#blackberry10? is deprecated; use Browser#blackberry?(version) instead"
|
|
96
|
+
assert_deprecated(message, __FILE__, __LINE__) { @browser.blackberry10? }
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
test "don't detect as two different versions" do
|
|
100
|
+
@browser = Browser.new ua: $ua["BLACKBERRY10"]
|
|
101
|
+
assert @browser.blackberry?(10)
|
|
102
|
+
refute @browser.blackberry?(7)
|
|
103
|
+
end
|
|
104
|
+
end
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
require "test_helper"
|
|
2
|
+
|
|
3
|
+
class BotsTest < Minitest::Test
|
|
4
|
+
test "detects bots" do
|
|
5
|
+
%w[
|
|
6
|
+
APPLE_BOT
|
|
7
|
+
DOMAINAREANIMATOR
|
|
8
|
+
DOT_BOT
|
|
9
|
+
FACEBOOK_BOT
|
|
10
|
+
GOOGLE_BOT
|
|
11
|
+
GRAPESHOT
|
|
12
|
+
LINKDEXBOT
|
|
13
|
+
LOAD_TIME_BOT
|
|
14
|
+
MAIL_RU
|
|
15
|
+
MEGAINDEX_RU
|
|
16
|
+
MSN_BOT
|
|
17
|
+
QUERYSEEKER
|
|
18
|
+
SCRAPY
|
|
19
|
+
TINEYE
|
|
20
|
+
YANDEX_DIRECT
|
|
21
|
+
YANDEX_METRIKA
|
|
22
|
+
].each do |key|
|
|
23
|
+
@browser = Browser.new ua: $ua[key]
|
|
24
|
+
assert @browser.bot?, "#{$ua[key]} should be a bot"
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
@browser = Browser.new ua: $ua["CHROME"]
|
|
28
|
+
refute @browser.bot?
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
test "detects Google Page Speed as a bot" do
|
|
32
|
+
@browser = Browser.new ua: $ua["GOOGLE_PAGE_SPEED_INSIGHTS"]
|
|
33
|
+
assert @browser.bot?
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
test "doesn't consider empty UA as bot" do
|
|
37
|
+
@browser = Browser.new ua: ""
|
|
38
|
+
|
|
39
|
+
refute @browser.bot?
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
test "allows setting empty string as bots" do
|
|
43
|
+
Browser::Bots.detect_empty_ua!
|
|
44
|
+
@browser = Browser.new ua: ""
|
|
45
|
+
|
|
46
|
+
assert @browser.bot?
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
test "doesn't detect mozilla as a bot when considering empty UA" do
|
|
50
|
+
Browser::Bots.detect_empty_ua!
|
|
51
|
+
@browser = Browser.new ua: "Mozilla"
|
|
52
|
+
|
|
53
|
+
refute @browser.bot?
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
test "returns bot name" do
|
|
57
|
+
@browser = Browser.new ua: $ua["GOOGLE_BOT"]
|
|
58
|
+
assert_equal @browser.bot_name, "Googlebot"
|
|
59
|
+
|
|
60
|
+
@browser = Browser.new ua: $ua["FACEBOOK_BOT"]
|
|
61
|
+
assert_equal @browser.bot_name, "facebookexternalhit"
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
test "returns bot name (empty string ua detection enabled)" do
|
|
65
|
+
Browser::Bots.detect_empty_ua!
|
|
66
|
+
@browser = Browser.new ua: ""
|
|
67
|
+
|
|
68
|
+
assert_equal @browser.bot_name, "Generic Bot"
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
test "returns nil for non-bots" do
|
|
72
|
+
@browser = Browser.new ua: $ua["CHROME"]
|
|
73
|
+
assert_equal @browser.bot_name, nil
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
test "detects as search engines" do
|
|
77
|
+
%w[
|
|
78
|
+
ASK
|
|
79
|
+
BAIDU
|
|
80
|
+
BINGBOT
|
|
81
|
+
DUCKDUCKGO
|
|
82
|
+
GOOGLE_BOT
|
|
83
|
+
YAHOO_SLURP
|
|
84
|
+
].each do |key|
|
|
85
|
+
@browser = Browser.new ua: $ua[key]
|
|
86
|
+
assert @browser.search_engine?, "#{$ua[key]} should be a search engine"
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
test "detects Google Structured Data Testing Tool as a bot" do
|
|
91
|
+
@browser = Browser.new ua: $ua["GOOGLE_STRUCTURED_DATA_TESTING_TOOL"]
|
|
92
|
+
|
|
93
|
+
assert @browser.bot?, "Google Structured Data Testing Tool should be a bot"
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
test "detects Daumoa" do
|
|
97
|
+
@browser = Browser.new ua: $ua["DAUMOA"]
|
|
98
|
+
|
|
99
|
+
assert_equal :ie, @browser.id
|
|
100
|
+
assert_equal "Internet Explorer", @browser.name
|
|
101
|
+
assert_equal "0.0", @browser.msie_full_version
|
|
102
|
+
assert_equal "0", @browser.msie_version
|
|
103
|
+
assert_equal "0.0", @browser.full_version
|
|
104
|
+
assert_equal "0", @browser.version
|
|
105
|
+
assert @browser.ie?
|
|
106
|
+
assert @browser.bot?
|
|
107
|
+
refute @browser.windows10?
|
|
108
|
+
refute @browser.windows_phone?
|
|
109
|
+
refute @browser.edge?
|
|
110
|
+
refute @browser.modern?
|
|
111
|
+
refute @browser.mobile?
|
|
112
|
+
refute @browser.webkit?
|
|
113
|
+
refute @browser.chrome?
|
|
114
|
+
refute @browser.safari?
|
|
115
|
+
end
|
|
116
|
+
end
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
require "test_helper"
|
|
2
|
+
|
|
3
|
+
class ChromeTest < Minitest::Test
|
|
4
|
+
test "detects chrome" do
|
|
5
|
+
@browser = Browser.new ua: $ua["CHROME"]
|
|
6
|
+
|
|
7
|
+
assert_equal "Chrome", @browser.name
|
|
8
|
+
assert @browser.chrome?
|
|
9
|
+
refute @browser.safari?
|
|
10
|
+
assert @browser.webkit?
|
|
11
|
+
assert @browser.modern?
|
|
12
|
+
assert_equal "5.0.375.99", @browser.full_version
|
|
13
|
+
assert_equal "5", @browser.version
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
test "detects mobile chrome" do
|
|
17
|
+
@browser = Browser.new ua: $ua["MOBILE_CHROME"]
|
|
18
|
+
|
|
19
|
+
assert_equal "Chrome", @browser.name
|
|
20
|
+
assert @browser.chrome?
|
|
21
|
+
refute @browser.safari?
|
|
22
|
+
assert @browser.webkit?
|
|
23
|
+
assert @browser.modern?
|
|
24
|
+
assert_equal "19.0.1084.60", @browser.full_version
|
|
25
|
+
assert_equal "19", @browser.version
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
test "detects samsung chrome" do
|
|
29
|
+
@browser = Browser.new ua: $ua["SAMSUNG_CHROME"]
|
|
30
|
+
|
|
31
|
+
assert_equal "Chrome", @browser.name
|
|
32
|
+
assert @browser.chrome?
|
|
33
|
+
assert @browser.android?
|
|
34
|
+
refute @browser.safari?
|
|
35
|
+
assert @browser.webkit?
|
|
36
|
+
assert @browser.modern?
|
|
37
|
+
assert_equal "28.0.1500.94", @browser.full_version
|
|
38
|
+
assert_equal "28", @browser.version
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
test "detects chrome os" do
|
|
42
|
+
@browser = Browser.new ua: $ua["CHROME_OS"]
|
|
43
|
+
assert @browser.chrome_os?
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
test "detects yandex browser" do
|
|
47
|
+
@browser = Browser.new ua: $ua["YANDEX_BROWSER"]
|
|
48
|
+
|
|
49
|
+
assert @browser.yandex?
|
|
50
|
+
assert @browser.chrome?
|
|
51
|
+
refute @browser.safari?
|
|
52
|
+
assert @browser.webkit?
|
|
53
|
+
assert_equal "41.0.2272.118", @browser.full_version
|
|
54
|
+
assert_equal "41", @browser.version
|
|
55
|
+
end
|
|
56
|
+
end
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
require "test_helper"
|
|
2
|
+
|
|
3
|
+
class ConsoleTest < Minitest::Test
|
|
4
|
+
test "detects nintendo wii" do
|
|
5
|
+
@browser = Browser.new ua: $ua["NINTENDO_WII"]
|
|
6
|
+
|
|
7
|
+
assert @browser.console?
|
|
8
|
+
assert @browser.nintendo?
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
test "detects nintendo wii u" do
|
|
12
|
+
@browser = Browser.new ua: $ua["NINTENDO_WIIU"]
|
|
13
|
+
|
|
14
|
+
assert @browser.console?
|
|
15
|
+
assert @browser.nintendo?
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
test "detects playstation 3" do
|
|
19
|
+
@browser = Browser.new ua: $ua["PLAYSTATION3"]
|
|
20
|
+
|
|
21
|
+
assert @browser.console?
|
|
22
|
+
assert @browser.playstation?
|
|
23
|
+
refute @browser.playstation4?
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
test "detects playstation 4" do
|
|
27
|
+
@browser = Browser.new ua: $ua["PLAYSTATION4"]
|
|
28
|
+
|
|
29
|
+
assert @browser.console?
|
|
30
|
+
assert @browser.playstation?
|
|
31
|
+
assert @browser.playstation4?
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
test "detects xbox 360" do
|
|
35
|
+
@browser = Browser.new ua: $ua["XBOX360"]
|
|
36
|
+
|
|
37
|
+
assert @browser.console?
|
|
38
|
+
assert @browser.xbox?
|
|
39
|
+
refute @browser.xbox_one?
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
test "detects xbox one" do
|
|
43
|
+
@browser = Browser.new ua: $ua["XBOXONE"]
|
|
44
|
+
|
|
45
|
+
assert @browser.console?
|
|
46
|
+
assert @browser.xbox?
|
|
47
|
+
assert @browser.xbox_one?
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
test "detects psp" do
|
|
51
|
+
@browser = Browser.new ua: $ua["PSP"]
|
|
52
|
+
|
|
53
|
+
assert_equal "PlayStation Portable", @browser.name
|
|
54
|
+
assert @browser.psp?
|
|
55
|
+
refute @browser.psp_vita?
|
|
56
|
+
assert @browser.mobile?
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
test "detects psp vita" do
|
|
60
|
+
@browser = Browser.new ua: $ua["PSP_VITA"]
|
|
61
|
+
|
|
62
|
+
assert_equal "PlayStation Portable", @browser.name
|
|
63
|
+
assert @browser.psp?
|
|
64
|
+
assert @browser.psp_vita?
|
|
65
|
+
assert @browser.mobile?
|
|
66
|
+
end
|
|
67
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
require "test_helper"
|
|
2
|
+
|
|
3
|
+
class FirefoxTest < Minitest::Test
|
|
4
|
+
test "detects firefox" do
|
|
5
|
+
@browser = Browser.new ua: $ua["FIREFOX"]
|
|
6
|
+
|
|
7
|
+
assert_equal "Firefox", @browser.name
|
|
8
|
+
assert @browser.firefox?
|
|
9
|
+
refute @browser.modern?
|
|
10
|
+
assert_equal "3.8", @browser.full_version
|
|
11
|
+
assert_equal "3", @browser.version
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
test "detects modern firefox" do
|
|
15
|
+
@browser = Browser.new ua: $ua["FIREFOX_MODERN"]
|
|
16
|
+
|
|
17
|
+
assert_equal :firefox, @browser.id
|
|
18
|
+
assert_equal "Firefox", @browser.name
|
|
19
|
+
assert @browser.firefox?
|
|
20
|
+
assert @browser.modern?
|
|
21
|
+
assert_equal "17.0", @browser.full_version
|
|
22
|
+
assert_equal "17", @browser.version
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
test "detects firefox android tablet" do
|
|
26
|
+
@browser = Browser.new ua: $ua["FIREFOX_TABLET"]
|
|
27
|
+
|
|
28
|
+
assert_equal :firefox, @browser.id
|
|
29
|
+
assert_equal "Firefox", @browser.name
|
|
30
|
+
assert @browser.firefox?
|
|
31
|
+
assert @browser.modern?
|
|
32
|
+
assert @browser.tablet?
|
|
33
|
+
assert @browser.android?
|
|
34
|
+
assert_equal "14.0", @browser.full_version
|
|
35
|
+
assert_equal "14", @browser.version
|
|
36
|
+
end
|
|
37
|
+
end
|